Size: a a a

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

2019 May 28

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
+ в spago ещё можно перегружать пакеты и добавлять те, которых нет в пэкедж-сете
источник

p

parket in PureScript — русскоговорящее сообщество
Репостну сюда свой вопрос из #purescript slack. Может кто что-то знает...

——

Hi, guys. Having some troubles with Halogen-4. Can not unsubscribe from event source.

——

I have such a JS function:

var on = function( eventName ){
   return function( target ){
       return function( cb ){
           return function(){
               var handler = function( val ){
                   return cb( val )()
               }
               target.on( eventName, handler )
               return function(){
                   console.log( "Detached" )
               }
           }
       }
   }
}
exports.onSomething = on( "something" )

——

Which is annotated as follows:

foreign import onSomething :: 
   Target ->
   ( SomeData -> Effect Unit ) ->
   Effect ( Effect Unit )

——

And I use it somewhere in eval as follows:

H.subscribe $ HES.eventSource'
   ( onSomething target )
   ( Just <<< H.request <<< HandleSomething )

——

And HandleSomething handler is defined as:

...
HandleSomething someData next -> pure $ next H.Done
...

——

Everything is fine. It compiles and works in sense I can get event payload. The problem described at very beginning: I can not unsubscribe. "Detached" not being printed to console. Am I doing something wrong? Thx.
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
бтв а где там runFnN или runEffectFnN в нашем коде для ф-ции onSomething?
(там ещё mkEffectFnN понадобится)
https://pursuit.purescript.org/packages/purescript-effect/2.0.1/docs/Effect.Uncurried#v:runEffectFn2
(ответил в слаке тоже)
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
источник

p

parket in PureScript — русскоговорящее сообщество
Я видел в slack. Но это не то :)
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
почему?
источник

p

parket in PureScript — русскоговорящее сообщество
Это же просто хэлпер. Чтоб не писать вот эти return function...
источник

p

parket in PureScript — русскоговорящее сообщество
Ну, оно никак не связано с тем, что не вызывается canceler
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
ну да, я без этих хелперов никогда не пишу, легко запутаться
источник

p

parket in PureScript — русскоговорящее сообщество
Я активно использую ( FnN, runFnN ). Эффекты оборачиваю ручками в
return function() {...
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
мм, немного не понял, но если ф-ция с побочным эффектом, то это должно быть отражено в её сигнатуре, а чтобы упростить написание таких ф-ций и минимизировать кол-во ошибок можно пользоваться пакетом purescript-effect, в котором есть вот эти вот все хелперы (runEffectFnN, ...)
источник

p

parket in PureScript — русскоговорящее сообщество
Vasiliy Yorkin
мм, немного не понял, но если ф-ция с побочным эффектом, то это должно быть отражено в её сигнатуре, а чтобы упростить написание таких ф-ций и минимизировать кол-во ошибок можно пользоваться пакетом purescript-effect, в котором есть вот эти вот все хелперы (runEffectFnN, ...)
Эффект это отложенное вычисление.

() => console.log("hello") :: Effect Unit
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Нет, всё-таки я зря потёр свои сообщения
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
мм, в примере выше эффект это вроде как вывод в консоль
отложенные вычисления могут быть чистыми, как в defer :: (Unit -> l) -> l
источник

p

parket in PureScript — русскоговорящее сообщество
() => 10 :: Effect Int

Эквивалентно pure 10
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
чтобы вызвался принт "Detached", нужно вызывать onSomething так:

subUnsub :: Effect Unit
subUnsub = do
    cancel <- onSomething ...
    . . .
    _ <- cancel -- здесь вывод "Detached" в консоль
    pure unit
источник

p

parket in PureScript — русскоговорящее сообщество
Anton Kotenko
чтобы вызвался принт "Detached", нужно вызывать onSomething так:

subUnsub :: Effect Unit
subUnsub = do
    cancel <- onSomething ...
    . . .
    _ <- cancel -- здесь вывод "Detached" в консоль
    pure unit
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
А
источник

p

parket in PureScript — русскоговорящее сообщество
Руками я то могу его дернуть. Мне надо чтоб его halogen пo Done дернул
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
тогда я не помощник, ретируюсь)
источник