2014-07-26 3 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 

Независимо от того, имеет ли блок блок по одной строке или более одной строки, действительно ли этот код вызывает вызов. Что мне не хватает?добавление к блоку блокировки, прекращение выполнения кода

ответ

1

Я думаю, это потому, что по intoducing в trace вы делаете d -> a в нечто вроде

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

, что означает, что это не будет оцениваться, если вы не используете unsafeInterleaveEff или что-то подобное на самом деле запустить его.

Я не уверен на 100%, но, возможно, компилятор не должен позволять вам использовать do без следа вообще, мне придется немного расследовать.

+0

эй, есть ли способ получить одну поддержку для этого? Я уже несколько дней борется с этим одним блочным тестом, и проблема кажется синтаксической. – Fresheyeball

Смежные вопросы