Trying to learn how to use folds by redefining prelude functions:
import Prelude hiding (sum, product, length, and, or, all, any, filter)
So far I've got up to all working, but I can't figure out what I'm doing wrong with all. I'm defining it as follows:
and :: [Bool] -> Bool
and = foldr (&&) True
...
all :: (a -> Bool) -> [a] -> Bool
all = and $ map
But this displays an error saying :
Probable cause: ‘map’ is applied to too few arguments
I've also tried defining it as:
and :: [Bool] -> Bool
and = foldr (&&) True
...
all :: (a -> Bool) -> [a] -> Bool
all f [xs] = and $ map f [xs]
This compiles fine, but when I try to call it it says:
[1 of 1] Compiling Fold ( Fold.hs, interpreted )
Ok, modules loaded: Fold.
*Fold> all even [0,2,4,6]
*** Exception: Fold.hs:17:1-29: Non-exhaustive patterns in function all
which I don't understand since shouldn't [xs] match any list, even an empty one? Why can I curry foldr without including the list but not map? Any help would be appreciated.