Size: a a a

2021 May 07

IO

I O in Haskell
Или

toTrans :: Applicative m => State s a -> StateT s m a
toTrans = mapStateT $ pure . runIdentity
источник

X

XÆA-XII in Haskell
Спасибо
источник

X

XÆA-XII in Haskell
Так даже интереснее, но непонятно, почему m - Аппликатив и откуда взялась Identity
источник

IO

I O in Haskell
State s a = StateT s Identity a
источник

IO

I O in Haskell
mapStateT :: (m (a, s) -> n (b, s)) -> StateT s m a -> StateT s n b
источник

X

XÆA-XII in Haskell
Ещё долго после этого спать не буду
источник

[

[BRM]White Rabbit in Haskell
То чувство, когда в хаскеле всё объяснение работы функции заключается в переписывании сигнатуры
источник

X

XÆA-XII in Haskell
А, допёр
источник

[

[BRM]White Rabbit in Haskell
О, наконец
источник

K

Kir in Haskell
Да.
источник

X

XÆA-XII in Haskell
А разве не Monad m => ... ?
источник

[

[BRM]White Rabbit in Haskell
Меняет контекст стейта, получается
источник

[

[BRM]White Rabbit in Haskell
Ну, видимо, хватает и аппликатива
источник

K

Kir in Haskell
Да там только pure используется, а оно в аппликативе
источник

X

XÆA-XII in Haskell
Но почему не
toTrans :: Monad m => State s a -> StateT s m a
toTrans = mapStateT $ return . runIdentity
?
источник

K

Kir in Haskell
Чтобы монаду вовнутрь не тащить
источник

IO

I O in Haskell
А зачем просить Monad когда он на самом деле не нужен? Вряд ли, конечно, кто-то напишет StateT s m a где m не монада, но все равно
источник

K

Kir in Haskell
Не знаю, зачем
источник

K

Kir in Haskell
Я вот обычно стараюсь минимизировать контекст
источник

AP

Aleksei (astynax) Pi... in Haskell
return требует Monad
источник