Size: a a a

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

2019 January 21

R:

Ryner :: () -> IO ❄️ in PureScript — русскоговорящее сообщество
λоλторт
Вроде же (>>) это легаси, не?
Почему (>>) легаси?
источник

λ

λоλторт in PureScript — русскоговорящее сообщество
Ryner :: () -> IO ❄️
Почему (>>) легаси?
Потому что уже есть (*>), который делает в точности то же самое.
источник

λ

λоλторт in PureScript — русскоговорящее сообщество
Точно так же, как return.
источник

R:

Ryner :: () -> IO ❄️ in PureScript — русскоговорящее сообщество
λоλторт
Точно так же, как return.
Ну да, pure звучит лучше
источник

R:

Ryner :: () -> IO ❄️ in PureScript — русскоговорящее сообщество
И не так конфьюзит новичков
источник

λ

λоλторт in PureScript — русскоговорящее сообщество
Ryner :: () -> IO ❄️
Ну да, pure звучит лучше
А ещё лучше описывает семантику.
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
для >> требования быть монадой избыточно
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
поэтому *> более правильный
источник

YL

Yura Lazarev in PureScript — русскоговорящее сообщество
Да, но с другой стороны семантика монады предписывает выполнять выражения строго последовательно, а семантика applicative допускает вычисление параллельно. В случае effectful computation это имеет значение.
источник

λ

λоλторт in PureScript — русскоговорящее сообщество
Yura Lazarev
Да, но с другой стороны семантика монады предписывает выполнять выражения строго последовательно, а семантика applicative допускает вычисление параллельно. В случае effectful computation это имеет значение.
Так нет же. Порядок эффектов задан как в монаде, так и в аппликативе.
источник

p

parket in PureScript — русскоговорящее сообщество
Vasiliy Yorkin
это я к тому, можно ли (теоретически) захантить кого-нибудь на пурсовый проект из чатика
предполагаю, что сложно, но можно
Теоретически можно 😂
источник

YL

Yura Lazarev in PureScript — русскоговорящее сообщество
λоλторт
Так нет же. Порядок эффектов задан как в монаде, так и в аппликативе.
Конечно, с точки зрения имплементации порядок вычисления эффектов строго определён и на практике можно расчитывать что сперва выполнится эффект слева, его результат проигнорируется и потом вычислится эффект справа. Но вот с точки зрения контракта имхо такой гарантии нет. И если в какой то момент появится имплементация вычисляющая левое и правое выражение (с эффектами) параллельно, то мой код поламается.
источник

YL

Yura Lazarev in PureScript — русскоговорящее сообщество
Например: https://ghc.haskell.org/trac/ghc/wiki/ApplicativeDo#Motivation
Some Monads have the property that Applicative bind is more efficient than Monad bind. Sometimes this is really important, such as when the Applicative bind is concurrent whereas the Monad bind is sequential (c.f. ​Haxl). For these monads we would like the do-notation to desugar to Applicative bind where possible, to take advantage of the improved behaviour but without forcing the user to explicitly choose.
источник

YL

Yura Lazarev in PureScript — русскоговорящее сообщество
(») имплементация использует (»=) + const, и тут независимо от того как имплементирован Applicative instance (последовательно или параллельно) есть гарантия строгой последовательности выполнения.  В случае же (*>) последовательность или параллельность выполнения зависит от Applicative instance
источник

YL

Yura Lazarev in PureScript — русскоговорящее сообщество
И вот ещё нашёл:
> The original Applicative/Monad proposal stated that after
implementation, the designated implementation of (>>) would become

 (>>) :: forall a b. m a -> m b -> m b
 (>>) = (*>)

by default. You might be inclined to change this to reflect the stated
proposal, but you really shouldn't! Why? Because people tend to define
such instances the /other/ way around: in particular, it is perfectly
legitimate to define an instance of Applicative (*>) in terms of (>>),
which would lead to an infinite loop for the default implementation of
Monad! And people do this in the wild.

This turned into a nasty bug that was tricky to track down, and rather
than eliminate it everywhere upstream, it's easier to just retain the
original default.
источник
2019 January 23

YL

Yura Lazarev in PureScript — русскоговорящее сообщество
Кто может объяснить почему приведение типов в данном случае не работает?
aa :: forall r.  (aff :: AFF | r) ->  (aff :: AFF, effect :: EFFECT |r)
aa = identity
источник

YL

Yura Lazarev in PureScript — русскоговорящее сообщество
[1/1 TypesDoNotUnify] test/Test.purs:45:6

 45  aa = identity
         
 
 Could not match type
 
   ( aff :: FProxy Aff
   | r0
   )
 
 with type
 
   ( effect :: FProxy Effect
   , aff :: FProxy Aff
   | r0
   )
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
не знаю как правильно подобрать слова, но в типе ф-ции указано, что тип результата должен содержать ("в том числе и") метку effect :: FProxy Effect, но тип аргумента же гаратнированно содержит лишь aff :: FProxy Aff
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
наоборот бы можно было, я думаю, т.е. если бы было:
aa :: forall r. (aff :: AFF, effect :: EFFECT | r) -> (aff :: AFF | r)
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Yura Lazarev
Кто может объяснить почему приведение типов в данном случае не работает?
aa :: forall r.  (aff :: AFF | r) ->  (aff :: AFF, effect :: EFFECT |r)
aa = identity
все еще  на версии 0.11?
источник