-- This is an example where the consideration of the evaluation strategy -- is important to check the contracts. const :: a -> b -> b const x y = y f :: Int -> Int f x | x>0 = 0 f'post :: Int -> Int -> Bool f'post x z = x>0 -- The postcondition holds in a strict language (where (f x) is evaluated) -- but it does not hold in a non-strict language like Curry: g :: Int -> Int g x = const (f x) 42 g'post :: Int -> Int -> Bool g'post x z = x>0