2015-11-06 15 views

回答

8

在鹼4.8 (>>=)被實現(見here)爲:

xs >>= f = [y | x <- xs, y <- f x] 

concatMap使用更復雜的生成器(源here

concatMap :: Foldable t => (a -> [b]) -> t a -> [b] 
concatMap f xs = build (\c n -> foldr (\x b -> foldr c b (f x)) n xs) 
+1

有趣。我不禁想到一個'Foldable'也是'Alternative'相當於一個'Monad' .... – AJFarmar

+0

@AJFarmar你爲什麼這麼想?我不知道這有什麼意義 – Emil

+0

@ user3217013'bind'fa f = foldr(<|>)empty $ foldr(:) [](fmap f fa)'where'bind'::(Foldable f,Applicative f) => fa - >(a - > fb) - > fb'。 QED。 – AJFarmar

相關問題