如何在PureScript v0.7中使用setTimeout

时间:2015-08-03 05:25:32

标签: purescript

我想在PureScript中使用setTimeout来制作动画。

loop n =
  if n > 100
  then do
    return Unit
  else do
    print n
    timeout (loop n+1) 30

purescript-timers不再适用于v0.7。

我对如何实现这一点没有任何想法。

2 个答案:

答案 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之类的内容。

其他一些可能的方法:

答案 1 :(得分:1)

有两种方法:

  1. 使用purescript-contrib中的purescript-js-timers

  2. 使用purescript-afflater')。

  3. 我更喜欢后者,这是一个例子:

    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 ] }