Size: a a a

Rust — русскоговорящее сообществo

2020 August 28

AT

Alexander Tchitchigi... in Rust — русскоговорящее сообществo
Julian =) Coffee
А в чем прикол монад для реюзабилити кода?
Есть функции, которые одинаково работают для любых монад. С HKT эти функции можно написать один раз для любых монадических типов.
источник

JC

Julian =) Coffee in Rust — русскоговорящее сообществo
🤔
источник

KR

Kai Ren in Rust — русскоговорящее сообществo
Это позволяет лучше абстрагировать эффекты.
источник

JC

Julian =) Coffee in Rust — русскоговорящее сообществo
Ну эффекты то другое, я про избавление от копипасты спрашивал.
источник

JC

Julian =) Coffee in Rust — русскоговорящее сообществo
Я просто думал думал, что может работать для всех монад и так и не придумал.
источник

AT

Alexander Tchitchigi... in Rust — русскоговорящее сообществo
flatten :: Monad m => m (m a) -> m a
sequence :: Monad m => [m a] -> m [a]
и ещё кучка.
источник

AT

Alexander Tchitchigi... in Rust — русскоговорящее сообществo
В общем случае, конечно, sequence :: Monad m, Traversable t => t (m a) -> m (t a) 🙂
источник

JC

Julian =) Coffee in Rust — русскоговорящее сообществo
А если на псевдораст это оформить?
источник

AT

Alexander Tchitchigi... in Rust — русскоговорящее сообществo
Так ведь HKT нет! 😂
источник

JC

Julian =) Coffee in Rust — русскоговорящее сообществo
А если б было)
источник

JC

Julian =) Coffee in Rust — русскоговорящее сообществo
Alexander Tchitchigin
flatten :: Monad m => m (m a) -> m a
sequence :: Monad m => [m a] -> m [a]
и ещё кучка.
список опшонов в опшон списка получается, как collect получается
если для опшонов
источник

JC

Julian =) Coffee in Rust — русскоговорящее сообществo
Вообще да, весело.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Julian =) Coffee
А если на псевдораст это оформить?
fn sequence<T, A, Monad<A>>() -> Monad<T<Item=A>>
where
 T: IntoIter<Item=Monad<A>>;
источник

AT

Alexander Tchitchigi... in Rust — русскоговорящее сообществo
flatten(o : Option<Option<a>>) -> Option<a>, только для любой монады. И т.п.
источник

Ct

Casual tears in Rust — русскоговорящее сообществo
Эрик
fn sequence<T, A, Monad<A>>() -> Monad<T<Item=A>>
where
 T: IntoIter<Item=Monad<A>>;
тут скорее будут полезны примеры таких функций, которые в расте копипастятся, а в HKT можно было бы сделать одну имплементацию для всех монад
источник

Э

Эрик in Rust — русскоговорящее сообществo
Casual tears
тут скорее будут полезны примеры таких функций, которые в расте копипастятся, а в HKT можно было бы сделать одну имплементацию для всех монад
.map(); .and_then()
источник

Ct

Casual tears in Rust — русскоговорящее сообществo
Alexander Tchitchigin
flatten :: Monad m => m (m a) -> m a
sequence :: Monad m => [m a] -> m [a]
и ещё кучка.
sequence = join_all на фьючах или flatten на итераторе, тут правда есть проблемка с ленивостью...
источник

Ct

Casual tears in Rust — русскоговорящее сообществo
Эрик
.map(); .and_then()
and_then энивей писать же, именно он и определяет монаду
источник

JC

Julian =) Coffee in Rust — русскоговорящее сообществo
а map это fmap и это еще от функтора, так что его тоже надо писать😎
источник

AT

Alexander Tchitchigi... in Rust — русскоговорящее сообществo
Casual tears
sequence = join_all на фьючах или flatten на итераторе, тут правда есть проблемка с ленивостью...
sequence != flatten, вообще-то...
источник