diff options
Diffstat (limited to 'Unlambda/Parser.hs')
-rw-r--r-- | Unlambda/Parser.hs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/Unlambda/Parser.hs b/Unlambda/Parser.hs index ec604cf..851fc01 100644 --- a/Unlambda/Parser.hs +++ b/Unlambda/Parser.hs @@ -9,11 +9,19 @@ module Unlambda.Parser ( import Control.Applicative( some ) import Control.Monad.Trans.Cont import Control.Monad.IO.Class +import Control.Monad.Trans.State.Lazy import Data.Either import Text.ParserCombinators.Parsec +type ULM a = ContT UnlambdaTerm (StateT UnlambdaState IO) a + +data UnlambdaState = UnlambdaState { exit :: UnlambdaTerm -> ULM UnlambdaTerm + , curChar :: Maybe Char } + + + data UnlambdaTerm = S | K | I | V | R | D | C | E | Bar | Reed | Dot Char | Compare Char @@ -22,7 +30,7 @@ data UnlambdaTerm = S | K | I | V | R | D | C | E | Bar | Reed | Spartial UnlambdaTerm | Sapp UnlambdaTerm UnlambdaTerm | Promise UnlambdaTerm - | Continuation (UnlambdaTerm -> ContT UnlambdaTerm IO UnlambdaTerm) + | Continuation (UnlambdaTerm -> ULM UnlambdaTerm) instance Eq UnlambdaTerm where |