反转效果顺序的应用函子

时间:2015-12-13 01:27:17

标签: haskell terminology functor applicative

鉴于一个应用仿函数f,我想到了一个新的应用仿函数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)

我的问题是

  1. 这是一个有效的Applicative实例(它是否遵守Applicative法律)?
  2. 这个结构有名字吗?在这个隐藏的地方是否有一个模块?

1 个答案:

答案 0 :(得分:11)

IRC的友好人员指出了transformers包提供的Backwards应用程序。您可能也喜欢标准库中提供的(<**>)运算符。