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

Si un bloc do a une ligne ou plus d'une ligne, il semble que ce code soit appelé ou non. Qu'est-ce que je rate?Ajouter au bloc do, arrête l'exécution du code

Répondre

1

Je pense que c'est parce que par le intoducing trace vous faire d -> a en quelque chose comme

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

qui signifie qu'il ne va pas être évalué à moins que vous utilisez unsafeInterleaveEff ou quelque chose de similaire pour exécuter réellement.

Je ne suis pas sûr à 100%, mais peut-être le compilateur ne devrait pas vous laisser utiliser le do sans la trace du tout, je vais devoir enquêter un peu.

+0

hey, y a-t-il un moyen pour que je puisse avoir un support individuel? J'ai lutté avec ce test unitaire pendant des jours maintenant, et le problème semble être la syntaxe. – Fresheyeball

Questions connexes