2015-11-06 9 views

risposta

8

In base di 4,8 (>>=) è implementato (vedi here) come:

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

e concatMap sta usando un builder più complicata (fonte 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

interessante. Non posso fare a meno di pensare che un 'Pieghevole' che è anche un' Alternativo' equivale a un 'Monade' .... – AJFarmar

+0

@ AJFarmar perché lo penseresti? Non so come questo abbia senso – Emil

+0

@ user3217013 'bind 'fa f = foldr (<|>) vuoto $ foldr (:) [] (fmap f fa)' dove 'bind' :: (F pieghevole, Applicativo f) => fa -> (a -> fb) -> fb'. QED. – AJFarmar

Problemi correlati