Monadische interpreter

Log in om je oplossingen te testen.
-- Een lambdacalculus
--------------------------------------------------------------------------------

-- Een variabelenaam
type Name = String

-- Een term in de lambdacalculus
data Term = Var Name
| Con Int
| Add Term Term
| Lam Name Term
| App Term Term

-- Een waarde in de lambdacalculus
data Value = Wrong -- De term was ongeldig
| Num Int -- Een getal
| Fun (Value -> M Value) -- Een monadische functie

-- De evaluatieomgeving: variabelenamen gecombineerd met hun waarde
type Environment = [(Name,Value)]

-- Een waarde afdrukken
instance Show Value where
show Wrong = "<wrong>"
show (Num i) = show i
show (Fun f) = "<function>"


-- Een eigen monad
--------------------------------------------------------------------------------

-- M is de identity monad
type M a = undefined

unitM :: a -> M a
unitM x = undefined
Je kunt zo vaak indienen als je wenst. Er wordt enkel rekening gehouden met je laatst ingediende oplossing.
Log in om je oplossingen te testen.