less prototype, less bad code implementation of CCHM type theory
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

40 lines
1020 B

{
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
}