leancheck-0.8.0: eg/higher-order.hs
import Test.LeanCheck
import Test.LeanCheck.Function
type A = Int
prop_foldlr :: (A -> A -> A) -> A -> [A] -> Bool
prop_foldlr f z xs = foldr f z xs == foldl f z xs
-- correct version of the property above
prop_foldlr' :: (A -> A -> A) -> A -> [A] -> Bool
prop_foldlr' f z xs = foldl (flip f) z (reverse xs) == foldr f z xs
prop_mapFilter :: (A -> A) -> (A -> Bool) -> [A] -> Bool
prop_mapFilter f p xs = filter p (map f xs) == map f (filter p xs)
main :: IO ()
main = do
check prop_foldlr
check prop_foldlr'
check prop_mapFilter