fork(1) download
  1. data Val a = Val a | Fkt a | Inc a | Abs a | Neg a
  2.  
  3. instance Num (Val a) where
  4. negate (Val a) = Fkt a
  5. negate (Fkt a) = Inc a
  6. negate (Inc a) = Abs a
  7. negate (Abs a) = Neg a
  8. negate (Neg a) = Val a
  9.  
  10. eval (Val a) = a
  11. eval (Fkt a) = fkt a where
  12. fkt a = if a > 0 then a * fkt (a-1) else 1
  13. eval (Inc a) = a + 1
  14. eval (Abs a) = abs a
  15. eval (Neg a) = - a
  16.  
  17. v = Val 4
  18.  
  19. main = mapM_ (print . eval) [v, -v, -(-v), -(-(-v)), -(-(-(-v))), -(-(-(-(-v))))]
Success #stdin #stdout 0s 6276KB
stdin
Standard input is empty
stdout
4
24
5
4
-4
4