From 281425310c5db21f87981eeb9601a71d1974d98d Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Thu, 10 Apr 2014 05:25:03 +1000 Subject: Rearranging files --- Unlambda/Interpreter.hs | 85 ------------------------------------------------- 1 file changed, 85 deletions(-) delete mode 100644 Unlambda/Interpreter.hs (limited to 'Unlambda/Interpreter.hs') diff --git a/Unlambda/Interpreter.hs b/Unlambda/Interpreter.hs deleted file mode 100644 index f1dcf05..0000000 --- a/Unlambda/Interpreter.hs +++ /dev/null @@ -1,85 +0,0 @@ -module Unlambda.Interpreter ( - unlambda - ) where - - -import System.IO.Error -import Control.Monad.Trans.Cont -import Control.Monad.IO.Class -import Data.Maybe -import Unlambda.Parser -import Unlambda.Types - - - - -unlambda :: UnlambdaTerm -> IO UnlambdaTerm -unlambda term = getResult $ eval term - - - -eval :: UnlambdaTerm -> ULM UnlambdaTerm -eval term = - case term of - App f x -> do - t <- eval f - apply t x - _ -> return term - - - -apply :: UnlambdaTerm -> UnlambdaTerm -> ULM UnlambdaTerm -apply firstTerm secondTerm = - case firstTerm of - K -> eval secondTerm >>= return . Kpartial - - Kpartial x -> eval secondTerm >> return x - - S -> eval secondTerm >>= return . Spartial - - Spartial x -> eval secondTerm >>= return . (Sapp x) - - Sapp x y -> do - z <- eval secondTerm - eval (App (App x z) (App y z)) - - I -> eval secondTerm - - V -> eval secondTerm >> return V - - C -> callCC $ \cont -> eval (App secondTerm (Continuation cont)) - - Continuation cont -> eval secondTerm >>= cont - - D -> return (Promise secondTerm) - - Promise x -> eval secondTerm >>= eval . (App x) - - Dot c -> do - t <- eval secondTerm - liftIO (putChar c) - return t - - R -> do - t <- eval secondTerm - liftIO (putChar '\n') - return t - - E -> eval secondTerm >>= doExit - - Reed -> do - t <- eval secondTerm - ch <- liftIO (catchIOError (getChar >>= return . Just) (\e -> return Nothing)) - setCurChar ch - if (isNothing ch) then eval (App t V) else eval (App t I) - - Bar -> do - t <- eval secondTerm - ch <- getCurChar - if (isNothing ch) then eval (App t V) else eval (App t I) - - Compare c -> do - t <- eval secondTerm - ch <- getCurChar - if (ch /= Just c) then eval (App t V) else eval (App t I) - -- cgit