我在努力弄清楚concatMap
如何與=<<
運營商相關。可能有人請解釋原因:Haskell concatMap點免費說明
f x = concatMap g $ take 5 $ x
成爲
f = (g =<<) . take 5
自由點。我可以看到concatMap
和=<<
的匹配類型,但我不明白爲什麼。
我在努力弄清楚concatMap
如何與=<<
運營商相關。可能有人請解釋原因:Haskell concatMap點免費說明
f x = concatMap g $ take 5 $ x
成爲
f = (g =<<) . take 5
自由點。我可以看到concatMap
和=<<
的匹配類型,但我不明白爲什麼。
=<<
對concatMap
的替換與無自由度無關。
>>=
對列表被定義爲的concat
和map
(其又相當於concatMap
)的組合:
xs >>= f = concat (map f xs)
=<<
當然的,並且只是>>=
翻轉。
對列表的單子實例的解釋可以在:https://en.wikibooks.org/wiki/Haskell/Understanding_monads/List
是的,我的問題被問得不好。只是讀你寫的東西..謝謝。讀一下你寫的東西,這是否也是一種很好的方式來考慮它'concatMap'是'join fmap'的列表(實際上是所有單子) – matthias
@matthias'concatMap = concat。:map =(concat )。 map',定義爲'map = fmap'和'concat = join',如此。並且,通常,[((g <= f)= <<)=(g = <<)。(f = <<)= join。(g <$>).join。(f <$>)']( http://stackoverflow.com/questions/11234632/monads-with-join-instead-of-bind/11249714#11249714)。 –
'f = concatMap g。拿5'也是免費的。 'a >> = f'是'concatMap f a',因爲這是列表monad的定義。 – Ryan