Una gran cantidad de aplicaciones Haskell utilizan transformadores mónada, que son instancias de la clase de tipo
class MonadTrans t where
lift :: Monad m => m a -> t m a
Lo que esto hace es permitir que usted combina el ambiente proporcionado por varias mónadas, envolviéndolos juntos. Por ejemplo, la mónada State s
le da la capacidad de operar en el estado del tipo s
que se enhebra automáticamente a través de su computación, mientras que la mónada Maybe
le permite un cortocircuito. Pero si quieres tanto de esos efectos, a continuación, se pueden combinar mediante el uso de una versión transformador mónada de uno de los dos, como por ejemplo:
something :: StateT s Maybe a
Aquí, StateT
se define en el paquete mtl
, y es similar a State
excepto por dejar un lugar para otra mónada que se encuentra dentro de ella. Mediante el uso de transformadores de mónada como este, puede componer los efectos de varias mónadas de forma gradual.
En este caso, Maybe
es la mónada interna, y StateT s Maybe
es la mónada externa. Puede obtener desde la mónada interna a la mónada externa usando lift
de la clase de tipo MonadTrans
.
Por favor, enlace a esos artículos. De lo contrario, su pregunta está infraespecificada. – misterbee