Poursuite de la quête pour donner un sens à ContT et ses amis. Veuillez considérer le code (absurde mais illustratif) ci-dessous:Haskell confusion avec ContT, callCC, quand
v :: IO (Either String [String])
v = return $ Left "Error message"
doit :: IO (Either String())
doit = (flip runContT return) $ callCC $ \k -> do
x <- liftIO $ v
x2 <- either (k . Left) return x
when True $ k (Left "Error message 2")
-- k (Left "Error message 3")
return $ Right() -- success
Ce code ne compile pas. Toutefois, si le remplace le when
avec l'appel k commenté ci-dessous, il compile. Que se passe-t-il?
Sinon, si je commente la ligne x2, il compile également. ???
De toute évidence, il s'agit d'une version distillée du code original et donc tous les éléments ont un but. Appréciez l'aide explicative sur ce qui se passe et comment y remédier. Merci.
"Poursuite de la quête pour donner un sens à ContT et à ses amis"? Une course de fou! La continuation qui peut être comprise n'est pas la vraie continuation. –