反转效果顺序的应用函子
Posted
技术标签:
【中文标题】反转效果顺序的应用函子【英文标题】:Applicative functor that reverses order of effects 【发布时间】:2016-03-18 18:03:55 【问题描述】:给定一个 applicative functor f
,我想制作一个新的 applicative functor Rev f
就像 f
一样,但效果的顺序颠倒了。这里是:
import Control.Applicative
newtype Rev f a = Rev unRev :: f a
instance Functor f => Functor (Rev f) where
fmap f (Rev fx) = Rev (fmap f fx)
instance Applicative f => Applicative (Rev f) where
pure x = Rev (pure x)
(Rev ff) <*> (Rev fx) = Rev (pure (\x f -> f x) <*> fx <*> ff)
我的问题是
-
这是一个有效的
Applicative
实例(它是否遵守Applicative
法律)?
这个结构有名字吗?是否有隐藏在某处的模块?
【问题讨论】:
如果您对Backwards
应用函子感兴趣,您可能也会喜欢Data.Functor.Reverse
,它可以向后折叠和遍历。您可能还会发现tardis
状态转换器很有趣。
【参考方案1】:
IRC 上的友好人士指出transformers
包提供的Backwards
应用程序。您可能还喜欢标准库中提供的(<**>)
运算符。
【讨论】:
以上是关于反转效果顺序的应用函子的主要内容,如果未能解决你的问题,请参考以下文章