오늘 모나드를 이해하려고 시도한 후 >>=
으로 놀고 있었고 흥미로운 패턴을 발견했습니다. 목록 모나드로 작업 할 때 >>=
은 concatMap처럼 작동하는 것으로 보입니다. 나는 유사점을 찾기 위해 주위를 둘러 보았고, 특히 해킹에 대한 정의를 살펴 보았다.>>>와 concatMap의 차이점
어떤 것들은 내가 노력 :
[1, 2, 3] >>= (iter 5 id) => [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3]
concatMap (iter 5 id) [1, 2, 3]=> [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3]
[1, 2, 3] >>= (iter 5 (+5)) => [1,6,11,16,21,2,7,12,17,22,3,8,13,18,23]
concatMap (iter 5 (+5)) [1, 2, 3] => [1,6,11,16,21,2,7,12,17,22,3,8,13,18,23]
iter
그냥 비 무한으로 반복이다,
iter i f a = toL $ Data.Sequence.iterateN i f a
where
toL = Data.Foldable.toList :: Data.Sequence.Seq a -> [a]
(repl.it에서 작업하므로 가져 오기가 엉망입니다.)
(>>=)
은 목록의 경우 concatMap
과 동일합니까? concatMap
의 일반화인가요?
이 구현에 대한 자세한 설명은 https://en.wikibooks.org/wiki/Haskell/Understanding_monads/List를 참조하십시오 모나드 목록 유형. 또한 https://wiki.haskell.org/All_About_Monads#List_is_also_a_monad. – bheklilr