Eff
私はs とsで書かれた次のプログラムを持っていますAff
。これは期待どおりに実行されます。つまり、指定されたものを出力しInt
、非同期計算を行います。
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
関数が2 回staging
呼び出されるようになりました。うーん?
誰でもこれを説明できますか?
ご協力いただきありがとうございます