From 05726e8f6c34c10ca7cee54bb583fbbe2c877569 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Wed, 10 Aug 2016 17:24:17 +0200 Subject: Switch to megaparsec & parsing framework --- events/src/Events/Spec/Parse/Token.hs | 43 +++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 events/src/Events/Spec/Parse/Token.hs (limited to 'events/src/Events/Spec/Parse/Token.hs') diff --git a/events/src/Events/Spec/Parse/Token.hs b/events/src/Events/Spec/Parse/Token.hs new file mode 100644 index 0000000..df6f09e --- /dev/null +++ b/events/src/Events/Spec/Parse/Token.hs @@ -0,0 +1,43 @@ +{-# LANGUAGE GADTs, DataKinds, OverloadedStrings #-} +{-# LANGUAGE StandaloneDeriving #-} +{-# LANGUAGE FlexibleInstances, TypeFamilies #-} + +module Events.Spec.Parse.Token + ( SpecToken(..) + , pToken, pTokens + ) where + +import Events.Spec.Types + +import Text.Megaparsec hiding (parse) +import Text.Megaparsec.Pos +import qualified Text.Megaparsec.Lexer as L + +import Data.Typeable (Typeable) + +import Data.Text (Text) +import qualified Data.Text as Text + +import Data.Text.Lazy as Lazy (Text) +import qualified Data.Text.Lazy as Lazy.Text + +data SpecToken = Token + deriving (Typeable, Show, Eq, Ord) + +instance Stream [SpecToken] where + type Token [SpecToken] = SpecToken + + uncons [] = Nothing + uncons (s:ss) = Just (s, ss) + + updatePos = undefined + + +tSpace :: ParsecT Dec Lazy.Text m () +tSpace = L.space (() <$ spaceChar) (L.skipLineComment "--") (L.skipBlockComment "{-" "-}") + +pToken :: ParsecT Dec Lazy.Text m SpecToken +pToken = mzero {- TODO -} + +pTokens :: ParsecT Dec Lazy.Text m [SpecToken] +pTokens = manyTill (tSpace *> pToken <* tSpace) eof -- cgit v1.2.3