我想在PureScript中使用setTimeout来制作动画。
loop n =
if n > 100
then do
return Unit
else do
print n
timeout (loop n+1) 30
purescript-timers不再适用于v0.7。
我对如何实现这一点没有任何想法。
答案 0 :(得分:2)
最简单的方法是为setTimeout
定义您自己的外国导入:
module SetTimeout where
foreign import data TIMEOUT :: !
foreign import timeout :: forall eff a.
Int ->
Eff (timeout :: TIMEOUT | eff) a ->
Eff (timeout :: TIMEOUT | eff) Unit
在您的外国Javascript模块中,您可以按如下方式定义setTimeout
:
"use strict";
// module SetTimeout
exports.timeout = function(millis) {
return function(action) {
return function() {
setTimeout(action, millis);
};
};
};
如果需要,您可以将其扩展为clearTimeout
之类的内容。
其他一些可能的方法:
purescript-timers
:https://github.com/purescript/purescript/wiki/0.7-Migration-Guide later'
:doc purescript-aff
答案 1 :(得分:1)
有两种方法:
使用purescript-contrib中的purescript-js-timers。
使用purescript-aff(later'
)。
我更喜欢后者,这是一个例子:
import Control.Monad.Aff as Aff
update :: forall eff. Action -> State -> EffModel State Action (eff)
update MyAction myState =
{ state: myState, effects: [ Aff.later' 1000 $ pure MyOtherAction ] }