> power :: [a] -> [[a]] > power [] = [[]] > power (e:l) = power l ++ map (\e x -> (e:x)) (power l)
Das gibt beim Typecheck nach dem Laden vom Script folgenden Typfehler:
ERROR "uebbl08.hs":15 - Type error in application *** Expression : power l ++ map (\e x -> e : x) (power l) *** Term : power l *** Type : [[a]] *** Does not match : [[[a]] -> [[a]]]
Kann das jemand erklären? Wo ist der entscheidende funktionale Unterschied zwischen map (e:) mit nur dem Konstruktor : und map (\e x -> e:x) mit Lambda - Kalkül?
map scheint in dem Fall map (\e x -> e:x), aber nicht in jedem Fall, eine Liste von Funktionen zurückzugeben, obwohl Haskell die Funktionalität von map alleine nicht so angibt, sondern als (a -> b) -> [a] -> [b].