如何在 PureScript v0.7 中使用 setTimeout
How to use setTimeout in PureScript v0.7
我想像这样在 PureScript 中为动画使用 setTimeout。
loop n =
if n > 100
then do
return Unit
else do
print n
timeout (loop n+1) 30
purescript-timers 在 v0.7 中不再有效。
我完全不知道如何实现它。
最简单的方法是为 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
之类的东西。
其他一些可能的方法:
- 按照 wiki 上的迁移指南发送拉取请求以更新
purescript-timers
:https://github.com/purescript/purescript/wiki/0.7-Migration-Guide
- 使用
purescript-aff
中的 later'
:doc
有两种方法:
使用 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 ] }
我想像这样在 PureScript 中为动画使用 setTimeout。
loop n =
if n > 100
then do
return Unit
else do
print n
timeout (loop n+1) 30
purescript-timers 在 v0.7 中不再有效。
我完全不知道如何实现它。
最简单的方法是为 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
之类的东西。
其他一些可能的方法:
- 按照 wiki 上的迁移指南发送拉取请求以更新
purescript-timers
:https://github.com/purescript/purescript/wiki/0.7-Migration-Guide - 使用
purescript-aff
中的later'
:doc
有两种方法:
使用 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 ] }