适用于将效果顺序颠倒的仿函数

PyR*_*lez 7 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)
Run Code Online (Sandbox Code Playgroud)

我的问题是

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

Dan*_*ner 11

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