У этого комбинатора Functor есть имя? - PullRequest
3 голосов
/ 22 февраля 2020

У меня есть комбинатор 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)

В простом английском sh я мог бы описать C как тип продукта, в котором fmap экземпляр раздает.

Моя реализация здесь подходит для моих целей, но я хочу знать, есть ли правильное имя для этого комбинатора в жаргонном выражении haskell или категории-теории c, чтобы я мог проецировать на будущие пользователи этой библиотеки, что это делает, или даже используют вместо этого существующий код, если такой существует.

У этого комбинатора уже есть имя?

1 Ответ

7 голосов
/ 22 февраля 2020

Это функторное произведение , определенное в модуле Data.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 g являются только функторами, если f и g также являются функторами.)

...