首页 > 解决方案 > 这个 Functor 组合器有名字吗?

问题描述

我有一个组合器C和一个Functor instance定义如下:

data C f1 f2 a = C (f1 a) (f2 a)

instance
  ( Functor f1
  , Functor f2
  )
    => Functor (C f1 f2)
  where
    fmap g (C a b) = C (fmap g a) (fmap g b)

用简单的英语,我可以将其描述Cfmap实例分布的产品类型。

我在这里的实现对于我的目的来说很好,但我想知道在 haskell 或类别理论行话中是否有这个组合器的正确名称,以便我可以向这个库的未来用户投射它的作用,甚至如果存在,请使用现有代码。

这个组合器是否已经有了名字?

标签: haskellfunctor

解决方案


它是一个函子 productData.Functor.Product ,在库的模块中定义base。从链接:

data Product f g a = Pair (f a) (g a)

instance (Functor f, Functor g) => Functor (Product f g) where
    fmap f (Pair x y) = Pair (fmap f x) (fmap f y)

(准确地说,两者都只是更高种类类型的产物,不一定是函子,但只有当C f g且都是函子时才是函子。)Product f gfg


推荐阅读