这个 Functor 组合器有名字吗?

Does this Functor combinator have a name?

我有一个组合器 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)

用简单的英语,我可能会将 C 描述为 fmap 实例分发的产品类型。

我在这里的实现很好地满足了我的目的,但我想知道这个组合器在 haskell 或类别理论术语中是否有合适的名称,以便我可以向未来的用户展示这个库的作用,或者如果存在的话,甚至可以使用现有代码。

这个组合子已经有名字了吗?

它是 functor product,在 base 库的 Data.Functor.Product 模块中定义。来自 link:

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 gProduct f g只是函子,如果fg 也是函子。)