Ich habe versucht, die FunktionVerwirrung über currying und Punkt freien Stil in Haskell
every :: (a -> IO Bool) -> [a] -> IO Bool
die das Thema für this question war zu implementieren. Ich habe versucht, dies ohne explizite Rekursion zu tun. Ich kam mit dem folgenden Code
every f xs = liftM (all id) $ sequence $ map f xs
Meine Funktion hat noch nicht funktionieren, da es nicht faul war (was in der Frage erforderlich war), so gibt es kein upvotes :-).
Allerdings habe ich nicht damit aufgehört. Ich habe versucht, die Funktion point-free so zu machen, dass es kürzer wäre (und vielleicht sogar kühler). Da die Argumente f
und xs
die letzten, die im Ausdruck sind ließ ich sie einfach:
every = liftM (all id) $ sequence $ map
Aber wie erwartet nicht funktioniert hat, in der Tat hat es nicht funktioniert:
[1 of 1] Compiling Main (stk.hs, interpreted) stk.hs:53:42: Couldn't match expected type `[m a]' against inferred type `(a1 -> b) -> [a1] -> [b]' In the second argument of `($)', namely `map' In the second argument of `($)', namely `sequence $ map' In the expression: liftM (all id) $ sequence $ map Failed, modules loaded: none.
Warum das? Ich hatte den Eindruck, dass es einfach war, nachstehende Funktionsargumente fallen zu lassen, worum es bei Currying eigentlich geht.
Oder Sie können -XNoMonomorphismRestriction verwenden und den expliziten Typ sig löschen. –
Argh ... die 'dot' Definition sieht aus wie jemand, der mich anstarrt. – gawi