много читал по этой теме
isSorted :: (Ord a) => (a -> a -> Bool) -> [a] -> Bool
isSorted cmp xs = and (zipWith cmp xs (tail xs))
cp :: Int -> Int -> Bool
cp x y = x <= y
main = print (isSorted cp [1,2,7,4,5]) -- False
main = print (isSorted cp [1,2,3,4,5]) -- True