JeśliHaskell: złożenie funkcji jest po prostu uszkodzony mój mózg
*Main> :t concatMap
concatMap :: (a -> [b]) -> [a] -> [b]
i
*Main> :t replicate
replicate :: Int -> a -> [a]
Więc jak to działa
*Main> :t concatMap . replicate
concatMap . replicate :: Int -> [b] -> [b]
podane:
*Main> :t (.)
(.) :: (b -> c) -> (a -> b) -> a -> c
?
To znaczy, moje rozumienie złożenie funkcji jest to, że replicate
powinien zwrócić cokolwiek concatMap
oczekuje jako argumentów w celu (.)
do pracy. Ale to NIE WYGLĄDA, aby tak było. Więc jaki jest haczyk?
Pytasz, dlaczego 'a -> [a]' pasuje do 'a -> [b]'? – sepp2k
@ sepp2k nope, część 'a's i' b' jest całkiem oczywista (jak sądzę) – artemave
+1 dla epickiego tytułu pytania. Uszkodzenie mózgu jest zdecydowanie częstą konsekwencją zaawansowanego programowania funkcjonalnego. ;-) – MathematicalOrchid