Functor产品和副产品的有用应用

时间:2015-12-21 12:31:26

标签: haskell functor category-theory

您能否展示一个简单的代码示例,该示例将显示Data.Functor ProductCoproduct的有用应用程序?

2 个答案:

答案 0 :(得分:9)

ProductConst的{​​{1}}可用于轻松实施两阶段评估。例如,假设您需要在两个阶段之间使用一些monadic效果,但是您希望确保您的客户端代码不能这样做(因为您想要精确控制它的发生方式和时间):

Reader

请注意,这当然只允许API的type TwoPhase c r = Product (Const c) (Reader r) run :: (Monad m, Monoid c) => (c -> m r) -> TwoPhase c r a -> m a run prepare (Pair (Const deps, phase2)) = do r <- prepare deps return $ runReader phase2 r 接口,而不是monadic接口;但这就是你在这种情况下通常想要的东西。

答案 1 :(得分:3)

Data types a la carte中使用了副产品仿函数的可能应用。我们的想法是使用coproducts组合一级数据类型构造函数。