1 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
2 {-# LANGUAGE FlexibleInstances #-}
3 {-# LANGUAGE MultiParamTypeClasses #-}
4 module Interpreter where
9 --newtype Interpreter a = I {runInterpreter :: Maybe a}
10 newtype Interpreter a = I {runInterpreter :: Maybe a}
11 deriving (Functor, Applicative, Monad, MonadFail)
13 instance Expression Interpreter where
22 not = fmap Prelude.not
29 if' p t e = p >>= \b->if b then t else e
32 instance Function a Interpreter where
33 fun def = Main $ let g :- m = def g in unmain m
35 instance DSL Interpreter