当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Functor产品和副产品的有用应用》经验,为你挑选了1个好方法。

你能展示一个简单的代码示例,它会显示Data.Functor's ProductCoproduct?的有用应用吗?



1> Cactus..:

ProductConstReader可以用来容易地实现两阶段的评价.例如,假设您需要在两个阶段之间使用一些monadic效果,但是您希望确保您的客户端代码不能这样做(因为您希望精确控制它发生的方式和时间):

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

请注意,这当然只允许ApplicativeAPI 的接口,而不是monadic接口; 但这就是你在这种情况下通常想要的东西.


这种表示形式是我们最终使用(而不是免费的应用程序构造)来实现[这些想法](http://gergo.erdi.hu/blog/2012-12-01-static_analysis_with_applicatives/).
推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有