当我遇到(<$) :: Functor f => a -> f b -> f a
(Functor的一部分)时,我正在使用Parsec并试图用Applicative样式编写它,利用Applicative和Functor提供的各种好的中缀运算符。
对于Parsec(或者我认为具有Applicative实例的任何东西),只需要pure x <* y
就可以使x <$ y
之类的内容更短一些。
我现在想知道的是,是否有任何具体原因导致缺少像($>) = flip (<$) :: Functor f => f a -> b -> f b
这样的运算符,这样我就能以整洁的形式表达我的解析器x *> pure y
x $> y
我知道我总是可以自己定义$>
,但既然<*
和*>
同时存在双重/相反/'翻转的东西'的概念在haskell中显得非常普遍,我认为它应该与<$
一起出现在标准库中。
答案 0 :(得分:3)
首先,一个微不足道的观点,你的意思是Functor f => f a -> b -> f b
。
其次,您转到FP Complete's Hoogle,输入所需的类型签名,然后discover that it is in the comonad and semigroupoids packages。
但是,我无法告诉你,为什么它不在任何更常见的包中。它似乎是包含在更标准位置的合理候选者,例如Control.Applicative
。