前記事:
参考記事:
継続モナドCont r a
を使うようにした。
myLoop :: (accT -> a -> (accT -> b) -> b) -> (accT -> b) -> accT -> [a] -> b -- ↓ -- 引数の順番を変える -- ↓ myLoop :: (accT -> a -> (accT -> b) -> b) -> accT -> [a] -> (accT -> b) -> b -- ↓ -- type Cont r a = (a -> r) -> r -- ↓ myLoop :: (accT -> a -> Cont b accT) -> accT -> [a] -> Cont b accT -- ↓ foldlM :: (Foldable t, Monad m) => (b -> a -> m b ) -> b -> t a -> m b
「おめでとう!myLoop
はfoldrCont
にしんかした!」
mapCont
があるのだからfoldrCont
があっても良いと思う。
色々やってたら、foldlCont = foldlM
一発で出来た。
そしてfoldlM
はfoldr
で定義されている。
一周回って戻ってきた感じだ。
.
.