私はのリストのモナドを理解していると思うが、私はそうでないと分かった。ここに物語があります。私は何を期待与えるバインド>>=
と遊ぶ(>>)はすべての左側の出力を破棄しますか?
与えられたリストm
と機能k
> let m = [1..10]
> :t m
m :: [Integer]
> let k = replicate 2
> :t k
k :: a -> [a]
> :t (>>=)
(>>=) :: Monad m => m a -> (a -> m b) -> m b
> :t m >>= k
m >>= k :: [Integer]
> m >>= k
[1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10]
が、左に>>
のためのIOモナド、すべてを経験してから(期待側は捨てられる)
m >> m
[1,2,3,4,5,6,7,8,9,10]
ガット
> :t (>>)
(>>) :: Monad m => m a -> m b -> m b
:t m >> m
m >> m :: [Integer]
> m >> m
[1,2,3,4,5,6,7,8,9,10,1,2,3,4,5 ... 9,10] -- truncated, real output is 100 elements
私は期待のよう>>
が振る舞うされていません(もちろん、私は誤解を持っている必要があります)と>>
を解釈するための正しい方法は何である理由を説明してください?
うわー!どのような明確な(そして非常に速い)答え。ありがとう – wizzup