+1

I use:

bool :: (a -> b) -> (a -> b) -> (a -> Bool) -> a -> b

which is better for point-free programming, but I'll go along with yours because bool :: a -> a -> Bool -> a is also useful.​