0
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 块是否有一行与多行,似乎影响该代码是否实际被调用。我错过了什么?

4

1 回答 1

1

我认为这是因为通过引入trace你正在制作的d -> a东西

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

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

我不是 100% 确定,但也许编译器根本不应该让你在do没有跟踪的情况下使用,我将不得不调查一下。

于 2014-07-26T15:44:31.500 回答