Size: a a a

2021 January 16

к

кана in Haskell Start
foldrM :: Monad m => (a -> b -> m b) -> b -> [a] -> m b
foldrM f z = foldr (\a b -> b >>= \b' -> f a b') (pure z)

foldrM' :: Monad m => (a -> b -> m b) -> b -> [a] -> m b
foldrM' f z [] = pure z
foldrM' f z (a : xs) = do
 b <- foldrM' f z xs
 f a b
источник
2021 January 17

A

Aragaer in Haskell Start
Вчера осознал, что State World [a], [State World a] и StateT World [] a это три разные вещи 8)
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Э.. тут вообще общего нет ничего
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Я бы ещё понял сравнение ListT State a и StateT [] a
источник

AP

Aleksei (astynax) Pi... in Haskell Start
State World [a] ~ State World a
тут нет второго слоя
источник

AP

Aleksei (astynax) Pi... in Haskell Start
[State World a] ~ [a]
тут тоже
источник

AP

Aleksei (astynax) Pi... in Haskell Start
То есть той композиции эффектов, которую дают трансформеры, нет. Есть ручной plumbing
источник

AP

Aleksei (astynax) Pi... in Haskell Start
(Кстати, в "All about monads" через такой ручной способ обработки второго слоя и подводят к трансформерам, как к более удобному способу вкладывать один эффект во второй)
источник

A

Aragaer in Haskell Start
ага. Ну вот я сейчас делаю такое:
newtype Actions a = Actions{runActions::StateT World [] a}

instance Monad Actions where
 (Actions xs) >>= k = Actions . StateT $ nubBy (sameWorld `on` snd) . runWorld
   where runWorld = runStateT $ do
           x <- xs
           runActions $ k x
источник

A

Aragaer in Haskell Start
собссно ради этого nubBy и затевается
источник

к

кана in Haskell Start
не очень понимаю такой код
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Э... зачем инстанс писать руками?
источник

к

кана in Haskell Start
StateT World [] уже имеет инстанс монады
источник

A

Aragaer in Haskell Start
да, но в нем >>= это ветвления. А мне надо устранять сопадающие ветки
источник

к

кана in Haskell Start
если там кастомный инстанс, то зачем там StateT, а не просто State World [a]
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Aragaer
да, но в нем >>= это ветвления. А мне надо устранять сопадающие ветки
Тогда нужно было врапать [] и только его кастомизировать. Как ZipList
источник

A

Aragaer in Haskell Start
потому что каждый a идет со своим w'
источник

A

Aragaer in Haskell Start
а ziplist не дает ветвлений вообще. Мне они нужны, но склеивать одинаковые миры
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Блин. ZipList — пример обёртки [] для изменения семантики
источник

A

Aragaer in Haskell Start
да
источник