haskell - 反转效果顺序的应用仿函数

标签 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)

我的问题是
  • 这是一个有效的Applicative实例(它是否遵守 Applicative 法律)?
  • 这个建筑有名字吗?是否有一个模块隐藏在某个地方?
  • 最佳答案

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

    关于haskell - 反转效果顺序的应用仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34247025/

    相关文章:

    haskell - 使用自然数的加法函数,给出自然数乘法的递归定义?

    haskell - 找不到网络模块

    c++ - 初始化数据成员的列表的正确术语是什么?

    git - 术语 "porcelain"在 Git 中是什么意思?

    c++ - 如何将工厂模式与仿函数一起使用?

    haskell - `x >> pure y` 等于 `liftM (const y) x`

    haskell - 在 Haskell 中以应用风格组合验证器

    haskell - 在列表中查找两个元素,按出现次数排序

    c - "implementation"中的 "implementation (in)dependent"是什么意思?

    haskell - fmap 的自由定理