Steve Downey wrote:
It makes eval1 a bit more complicated, and not as straightforward
translation from the type system being described, though.
e.g reducing If looks more like
eval1 (TmIfExpr t1 t2 t3) =
let t1' = eval1 t1
in case t1' of
{ Just t1'' -> Just $ TmIfExpr t1'' t2 t3
; Nothing -> Nothing
}
You should use the fact that Maybe is a monad:
eval1 (TmIfExpr t1 t2 t3) =
do t1' <- eval1 t1
return $ TmIfExpr t1' t2 t3
and eval then looks like
eval t =
let t' = eval1 t
in case t' of
{ Just t'' -> eval t''
; Nothing -> t'
}
(In the above, I suspect you need Nothing -> t, no prime.)
BTW, there's no need to use let here:
eval t = case eval1 t of Just t' -> eval t'
Nothing -> t
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe