data Val a = Val a | Fkt a | Inc a | Abs a | Neg a
instance Num (Val a
) where
eval (Val a) = a
eval (Fkt a) = fkt a where
fkt a = if a > 0 then a * fkt (a-1) else 1
eval (Inc a) = a + 1
eval (Neg a) = - a
v = Val 4
main
= mapM_ (print . eval
) [v
, -v
, -(-v
), -(-(-v
)), -(-(-(-v
))), -(-(-(-(-v
))))]
ZGF0YSBWYWwgYSA9IFZhbCBhIHwgRmt0IGEgfCBJbmMgYSB8IEFicyBhIHwgTmVnIGEKCmluc3RhbmNlIE51bSAoVmFsIGEpIHdoZXJlCgluZWdhdGUgKFZhbCBhKSA9IEZrdCBhCgluZWdhdGUgKEZrdCBhKSA9IEluYyBhCgluZWdhdGUgKEluYyBhKSA9IEFicyBhCgluZWdhdGUgKEFicyBhKSA9IE5lZyBhCgluZWdhdGUgKE5lZyBhKSA9IFZhbCBhCgpldmFsIChWYWwgYSkgPSBhCmV2YWwgKEZrdCBhKSA9IGZrdCBhIHdoZXJlCglma3QgYSA9IGlmIGEgPiAwIHRoZW4gYSAqIGZrdCAoYS0xKSBlbHNlIDEKZXZhbCAoSW5jIGEpID0gYSArIDEKZXZhbCAoQWJzIGEpID0gYWJzIGEKZXZhbCAoTmVnIGEpID0gLSBhCgp2ID0gVmFsIDQKCm1haW4gPSBtYXBNXyAocHJpbnQgLiBldmFsKSBbdiwgLXYsIC0oLXYpLCAtKC0oLXYpKSwgLSgtKC0oLXYpKSksIC0oLSgtKC0oLXYpKSkpXQ==