+1 I use:bool :: (a -> b) -> (a -> b) -> (a -> Bool) -> a -> bwhich is better for point-free programming, but I'll go along with yours because bool :: a -> a -> Bool -> a is also useful.