import Html exposing (text)
import Text
type Term = Con Int
| Div Term Term
type M a = Raise Exception | Return a
type alias Exception = String
unit : a -> M a
unit a = Return a
flatMap : M a -> (a -> M b) -> M b
flatMap a k = case a of
Raise e -> Raise e
Return a -> k a
eval : Term -> M Int
eval term =
case term of
Con a -> unit a
Div t u ->
flatMap (eval t)(\a ->
flatMap (eval u)(\b ->
if b == 0
then Raise "divide by zero"
else unit (a//b)
)
)
main = text (toString (eval (Div(Div(Con 1972)(Con 2))(Con 0))))