添加到do块,停止代码执行

时间:2014-07-26 15:28:41

标签: purescript

foreign import subscribeEventedOnPrime
  "function subscribeEventedOnPrime(n){  \
  \ return function(fn){                 \
  \    return function(obj){             \
  \       return function(){             \
  \         obj.addEventListener(n, fn); \
  \         return obj;                  \
  \       };                             \
  \     };                               \
  \  };                                  \
  \}" :: forall d a o eff. 
         String -> 
         (d -> a) -> 
         o -> 
         Eff (customEvent :: CustomEvent | eff) o

subscribeEventedOn n f o = subscribeEventedOnPrime n (\e -> do
    trace "wtf" -- if this line is removed, everything seems to work
    f $ newEvent e."type" e."detail"
  ) o

do块是否有一行与多行,似乎影响该代码是否实际被调用。我错过了什么?

1 个答案:

答案 0 :(得分:1)

我认为这是因为通过引导trace您将d -> a转换为类似

的内容
forall e. d -> Eff (trace :: Trace | e) Unit

这意味着除非您使用unsafeInterleaveEff或类似的东西来实际运行它,否则不会对其进行评估。

我不是100%肯定,但也许编译器不应该让你使用do而没有任何痕迹,我不得不调查一下。