haskell monads monad-transformers applicative

haskell - ¿Para qué sirve Control.Applicative.Lift?



monads monad-transformers (1)

Escribí sobre transformers en una publicación reciente del blog, y alguien preguntó "¿para qué usa la gente Control.Applicative.Lift ?" No pude responder a esta pregunta, así que repetí la pregunta a StackOverflow: ¿para qué se utiliza Control.Applicative.Lift ?

Veo un ejemplo de uso de él en el paquete, pero parece que no soy capaz de analizar por completo lo que hace. ¿Alguien sabe algún otro ejemplo en la naturaleza?


Lift es una contribución relativamente nueva:

data Lift f a = Pure a | Other (f a)

Es decir, dado un functor f , puede obtener un nuevo funtor componiendo f con un valor puro.

El paquete en sí da un ejemplo:

-- | An applicative functor that collects a monoid (e.g. lists) of errors. -- A sequence of computations fails if any of its components do, but -- unlike monads made with ''ErrorT'' from "Control.Monad.Trans.Error", -- these computations continue after an error, collecting all the errors. type Errors e = Lift (Constant e) -- | Report an error. failure :: Monoid e => e -> Errors e a failure e = Other (Constant e)

Sin embargo, no sé de ningún uso en el mundo de esto.