Size: a a a

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

2019 June 11

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
в емаксе, вроде, это называется quail (в purescript-mode, который форк haskell-mode)
источник

ЗП

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

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
Зигохистоморфный Препроморфизм
теперь

instance mfunctorFreeT :: Functor f => MFunctor (FreeT f) where
 hoist = hoistFreeT


справедливо
ага, я наблюдаю в слаке :)
источник

ЗП

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

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Vasiliy Yorkin
ага, я наблюдаю в слаке :)
hoistFreeT беззаконный
источник

ЗП

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

ЗП

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

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
инвариантный вариант монадного морфизма
https://github.com/Gabriel439/Haskell-MMorph-Library/issues/48
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
зацените hoistLogicT :D
источник
2019 June 17

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Скажите, у меня самописный MUV на purescript-events, который принимает messages :: Event Message, в update должен выполниться Effect, как бы вы такое организовали?

Сейчас я делаю (скорее всего, глупо):

updates = Event.fold update messages initialModel

где

update :: Message -> ExceptT String Effect model -> ExceptT String Effect model
update msg state = Model.apply msg state

потом

postUpdate userView <$> updates :: Event (Effect view)

где

postUpdate :: (Either String model -> view) -> ExceptT String Effect model -> Effect view 
postUpdate userView lastState = runExceptT ... lastState >>= userView.


И вот проблема в том, что все эффекты (которые видимо нужно не в postUpdate запускать, но где тогда?) и мессаджи применяются заново, когда пользователь подписывается на Event (Effect view) и делает Event.subscribe views $ \v -> v >>= .... То есть в момент бинда на каждое событие в этом Event запускаются снова все мессажди (включая новый), которые были переданы .apply до этого.
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
В идеале бы отдавал Event view, но тогда непонятно как "поглотить" эффект от runExceptT
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
сто лет events не использовал...
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
они мало влияют на проблему, думаю, ну кроме самой идеи, что "входит" поток мессаджей, а "выходит" поток view
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Забавно ещё то, что в тестах и при рендеринге всё как бы работает, просто модель несколько раз "собирается", не поставил бы трейсы — не заметил бы
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
хм, не смог воспроизвести на минимальном примере (https://gist.github.com/shamansir/ef3dd964769e960c19f5ca45fa8e84f8) — здесь всё норм, придётся глубже ковыряться.
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
То что при биндинге view модель собирается заново обнаружил через DT.spy и дебаггер хрома — у меня в модели вся структура (типа дерево) на UUID (с вашей помощью) и при любом новом мессадже у всех листьев UUID новые при ожидавшейся структуре, а мессаджи в консоли выводятся в порядке (1, 1, 2, 1, 2, 3, ...).
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Удалось воспроизвести, обновил gist: https://gist.github.com/shamansir/ef3dd964769e960c19f5ca45fa8e84f8

Если выполнять эффект в update,  в данном случае UUID.new, например, то он запускается, похоже, заново.

В новом примере update:

        update msg model =
           model >>= \prev -> do
               uuid <- liftEffect UUID.new
               pure $ "(" <> show msg <> ":" <> UUID.toString uuid <> ")-" <> prev

по идее сгенерённые раньше UUID не должны изменяться, но в логе следующее:

msg: MsgOne {}
(MSG-ONE:336228ee-b2e8-4c78-acf4-a8302125552b)-|
msg: MsgTwo {}
(MSG-TWO:7965f57f-cde5-4ca5-8377-bd03b9c71784)-(MSG-ONE:cbfeae0b-11f1-4e58-a4f9-35bab61bdbf2)-|
msg: MsgTwo {}
(MSG-TWO:2bea4621-873a-47f5-9803-0da53e5dc34f)-(MSG-TWO:fd7bdf0d-6f6b-46d2-b394-f268c4c5a473)-(MSG-ONE:256702ea-6702-4aa2-84c0-3977e1763e82)-|

Мессаджи правильные, а UUID — все разные
источник
2019 June 18

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
кто-нибудь ещё пользуется psc-ide в emacs, кроме меня?
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
У вас тоже бывает такое, что psc-ide не видит изменений? Т.е. у меня вот часто бывает так, что если в некотором файле\модуле ошибка, то psc-ide говорит, что такой модуль не найден. Потом я иду туда, исправляю ошибку, возвращаюсь к изначальному модулю, который зависел от того, в котором я только что исправил эту ошибку и вижу, что psc-ide по-прежнему сообщает, что модуль не найден. Хотя я только что его скомпилировал, принудительно выполнив команду psc-ide-build, и увидел внизу OK. Причём, кажется, раньше такого никогда не было. Т.е. каких-то 3-4 месяца назад я точно этого не видел. Есть вот этот ишью https://github.com/purescript/purescript/issues/3145, но судя по всему, оно не связано. Попробую чекаутнуть зимний комит какой-нибудь.
upd: Чекаутнул январьский вот этот https://github.com/purescript-emacs/psc-ide-emacs/commit/230101a3d56c9e062c3ce2bf9a4dc077e5607cc0, посмотрим
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Anton Kotenko
Удалось воспроизвести, обновил gist: https://gist.github.com/shamansir/ef3dd964769e960c19f5ca45fa8e84f8

Если выполнять эффект в update,  в данном случае UUID.new, например, то он запускается, похоже, заново.

В новом примере update:

        update msg model =
           model >>= \prev -> do
               uuid <- liftEffect UUID.new
               pure $ "(" <> show msg <> ":" <> UUID.toString uuid <> ")-" <> prev

по идее сгенерённые раньше UUID не должны изменяться, но в логе следующее:

msg: MsgOne {}
(MSG-ONE:336228ee-b2e8-4c78-acf4-a8302125552b)-|
msg: MsgTwo {}
(MSG-TWO:7965f57f-cde5-4ca5-8377-bd03b9c71784)-(MSG-ONE:cbfeae0b-11f1-4e58-a4f9-35bab61bdbf2)-|
msg: MsgTwo {}
(MSG-TWO:2bea4621-873a-47f5-9803-0da53e5dc34f)-(MSG-TWO:fd7bdf0d-6f6b-46d2-b394-f268c4c5a473)-(MSG-ONE:256702ea-6702-4aa2-84c0-3977e1763e82)-|

Мессаджи правильные, а UUID — все разные
Nathan мне помог в слаке
источник