21

transformers最近のブログ投稿で、「人々は何のために Control.Applicative.Lift を使用するのですか?」と尋ねた人がいまし。私はこれに答えることができなかったので、質問を StackOverflow にエコーします - 何 Control.Applicative.Lift使用されますか?

パッケージに使用例が 1 つありますが、その機能を完全に解析できるわけではないようです。野生の他の例を知っている人はいますか?

4

1 に答える 1

19

Liftは比較的新しい貢献です。

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

つまり、 functor が与えられた場合、純粋な値でf構成することによって新しい functor を取得できます。f

パッケージ自体は例を示しています:

-- | 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)

ただし、これが実際に使用されているかどうかはわかりません。

于 2012-12-24T15:02:07.697 に答える