summaryrefslogtreecommitdiff
path: root/events/src/Events/Spec/Parse/Token.hs
diff options
context:
space:
mode:
Diffstat (limited to 'events/src/Events/Spec/Parse/Token.hs')
-rw-r--r--events/src/Events/Spec/Parse/Token.hs43
1 files changed, 43 insertions, 0 deletions
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 @@
1{-# LANGUAGE GADTs, DataKinds, OverloadedStrings #-}
2{-# LANGUAGE StandaloneDeriving #-}
3{-# LANGUAGE FlexibleInstances, TypeFamilies #-}
4
5module Events.Spec.Parse.Token
6 ( SpecToken(..)
7 , pToken, pTokens
8 ) where
9
10import Events.Spec.Types
11
12import Text.Megaparsec hiding (parse)
13import Text.Megaparsec.Pos
14import qualified Text.Megaparsec.Lexer as L
15
16import Data.Typeable (Typeable)
17
18import Data.Text (Text)
19import qualified Data.Text as Text
20
21import Data.Text.Lazy as Lazy (Text)
22import qualified Data.Text.Lazy as Lazy.Text
23
24data SpecToken = Token
25 deriving (Typeable, Show, Eq, Ord)
26
27instance Stream [SpecToken] where
28 type Token [SpecToken] = SpecToken
29
30 uncons [] = Nothing
31 uncons (s:ss) = Just (s, ss)
32
33 updatePos = undefined
34
35
36tSpace :: ParsecT Dec Lazy.Text m ()
37tSpace = L.space (() <$ spaceChar) (L.skipLineComment "--") (L.skipBlockComment "{-" "-}")
38
39pToken :: ParsecT Dec Lazy.Text m SpecToken
40pToken = mzero {- TODO -}
41
42pTokens :: ParsecT Dec Lazy.Text m [SpecToken]
43pTokens = manyTill (tSpace *> pToken <* tSpace) eof