2014-07-26 87 views
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代碼塊是否有一行vs多行,似乎影響代碼是否實際被調用。我錯過了什麼?加入做代碼塊,停止代碼執行

回答

1

我認爲這是因爲通過intoducing的trace你讓d -> a成類似

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

這意味着它不會被評估,除非您使用unsafeInterleaveEff或類似的東西,實際運行它。

我不是100%確定的,但編譯器可能不應該讓你使用do根本沒有蹤跡,我必須調查一下。

+0

嘿,有沒有什麼辦法可以得到一對一的支持呢?我一直在爲這幾天的單元測試掙扎,而這個問題似乎是語法。 – Fresheyeball