1
私はEff
とAff
で書かれた以下のプログラマーを持っています。期待どおりに走るつまり、与えられたInt
が出力され、非同期計算が行われます。なぜ私のエフェクトは2回呼び出されますか?
type JsonResponse = AffjaxResponse Json
access :: forall e m. Aff (ajax :: AJAX | e) (Either Error JsonResponse)
access = attempt $ get "http://localhost:8080/livesys/Robert"
staging :: forall e. Int -> Eff (console :: CONSOLE | e) Int
staging i = do
liftEff $ log $ ">>" ++ show i
return i
main :: forall a. Int -> Aff (ajax :: AJAX, console :: CONSOLE| a) Int
main state = do
s <- liftEff $ staging state
a <- liftAff access
return s
私はしかしmain
内で呼び出しの順序を変更する場合は、何か神秘的な問題が発生した:
main :: forall a. Int -> Aff (ajax :: AJAX, console :: CONSOLE| a) Int
main state = do
a <- liftAff access
s <- liftEff $ staging state
return s
を機能staging
が今二回と呼ばれています!ウット?
これは誰でも説明できますか?あなたの助け
'main'の' liftAff'への呼び出しを削除するとどうなりますか?私はそれが必要だとは思わない。 (確かに間違っていると思われるこの行動を言い訳しない;私はただ診断しようとしている) – hdgarrood
変更はありません。 「エキゾチック」なのは、私がhttps://github.com/sectore/purescript-webpack-vanilla-hmrを使っていることだけです。それにもかかわらず、一貫して行動する必要があります(常に2回または常に1回ですが、異なる注文では異なりません)。 – robkuz
合意。上記のプログラムを 'psc-bundle'で実行してpastebinにアップロードできますか? – hdgarrood