Je souhaite lever une fonction comme mask_ :: IO a -> IO a
pour créer une fonction avec cette signature: lmask_ :: StateT Bool IO a -> StateT IO a
.Soulever une fonction avec un paramètre monad dans un transformateur monad
Mon problème est, comment gérer le callback/premier paramètre? Le code suivant ne serait-il pas incorrect puisqu'il exécuterait le rappel avant le code de mask_
?
lmask_ :: StateT Bool IO a -> StateT Bool IO a
lmask_ m = do
r <- m
lift (mask_ (return r))
Existe-t-il une façon générale de procéder? Un assistant comme lift1 :: MonadTrans t => (m a -> m a) -> (t m a -> t m a)
?