{ module Presyntax.Lexer where import qualified Data.ByteString.Lazy as Lbs import qualified Data.Text.Encoding as T import qualified Data.ByteString as Sbs import Presyntax.Tokens } %wrapper "monad-bytestring" $alpha = [a-zA-Z] $digit = [0-9] tokens :- $white+ ; $alpha [$alpha $digit \_ \']* { yield TokVar } \= { always TokEqual } \: { always TokColon } \\ { always TokLambda } "->" { always TokArrow } \( { always TokOParen } \{ { always TokOBrace } \) { always TokCParen } \} { always TokCBrace } { alexEOF :: Alex Token alexEOF = do (AlexPn _ l c, _, _, _) <- alexGetInput pure $ Token TokEof l c yield k t@(AlexPn _ l c, _, s, _) i = pure (Token (k $! (T.decodeUtf8 (Lbs.toStrict (Lbs.take i s)))) l c) always k x i = yield (const k) x i }