Я новичок в PureScript, и мне нужна помощь, чтобы понять, почему функция FFI, смоделированная с помощью монады Aff, у меня не работает.
Ожидаемое поведение — запись сообщения «keyMessage» в консоль через 1000 мс.
Вместо этого программа просто зависает на неопределенный срок после следующего вывода:
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();
};
};
};
};
Заранее спасибо за ваши идеи!
makeAff
и используйтеEff
в импорте внешних функций. - person Felix Schlitter   schedule 07.02.2018