2017-08-30 4 views
0

J'essaye de attempt un Aff calcul. Considérez le code suivant:Les parenthèses changent l'exécution de code

result <- 
    pool # withPool \connection -> do 
     execute_ ("insert into user (email, password) values ('" 
      <> unwrap userInfo.email <> "', '" <> unwrap userInfo.password <> "')") 
      connection 
    # attempt 

Le résultat Aff de attempt est exécuté plus tard à l'aide runAff.

Malgré l'utilisation de attempt, l'erreur dans withPool est propagée au gestionnaire d'erreurs runAff.

Cependant, si des parenthèses sont ajoutées autour de la Aff étant tenté, l'erreur est « pris » comme prévu:

result <- 
    (pool # withPool \connection -> do 
     execute_ ("insert into user (email, password) values ('" 
      <> unwrap userInfo.email <> "', '" <> unwrap userInfo.password <> "')") 
      connection) 
    # attempt 

Que suis-je manque ici et pourquoi le comportement de ces deux extraits de code différents?

Répondre

1

Le premier extrait est équivalent à

result <- 
    pool # withPool (\connection -> do 
    execute_ ... 
    # attempt) 

et non

result <- 
    pool # (withPool \connection -> do 
      execute_ ...) 
     # attempt