gpt4 book ai didi

monads - PureScript FFI 和 Aff Monad : Why does the effect never run?

转载 作者:行者123 更新时间:2023-12-02 21:35:13 24 4
gpt4 key购买 nike

我是一个纯粹的 PureScript 新手,需要一些帮助来弄清楚为什么使用 Aff monad 建模的 FFI 函数似乎不适合我。

预期行为是在 1000 毫秒后将消息“keyMessage”记录到控制台。

相反,程序在以下输出后无限期挂起:

Compiling Main
* Build successful.
Waiting for message...

Main.purs:

module Main where

import Prelude
import Control.Monad.Aff (Aff, Fiber, launchAff)
import Control.Monad.Aff.Console (log)
import Control.Monad.Eff (Eff, kind Effect)
import Control.Monad.Eff.Console (CONSOLE)

main :: forall e. Eff (console :: CONSOLE, to :: TIMEOUT | e) (Fiber (console :: CONSOLE, to :: TIMEOUT | e) Unit)
main = launchAff do
log "Waiting for message..."
m <- message "key"
log m

foreign import data TIMEOUT :: Effect

foreign import message :: forall e. String -> Aff (to :: TIMEOUT | e) String

Main.js:

'use strict';

exports.message = function(key) {
return function(errback, callback) {
var timeout = setTimeout(function() {
callback(key + 'Message');
}, 1000);

return function() {
return function (cancelErrback, cancelCallback) {
clearTimeout(timeout);
return cancelCallback();
};
};
};
};

预先感谢您的见解!

最佳答案

如果您使用的是 purescript-aff 的最新主要版本(v4 或更高版本),则 Aff 的运行时表示已更改,您无法创建它不再直接使用 errback/callback 函数风格。

看看 https://pursuit.purescript.org/packages/purescript-aff/4.0.2/docs/Control.Monad.Aff.Compat模块,特别是 EffFnAff 类型/fromEffFnAff 函数,以解释等效功能现在如何工作。

或者,您也可以使用 makeAff 构造 Aff,但这需要稍微重新编写您的 FFI 代码。

关于monads - PureScript FFI 和 Aff Monad : Why does the effect never run?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48646839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com