haskell功能的bifunctor在哪里?

srg*_*hma 7 haskell category-theory

我找不到fif的bifunctor模拟.

说明:

对象的Functor - 数据类型构造函数.类型 - a -> f a

函数的函数 - fmap.类型 - (a -> b) -> (fa -> fb)

对象的Bifunctor - 结果bimap f g,在哪里f :: (a -> a'),g :: (b -> b').类型 - p a b -> p a' b'

功能的Bifunctor - ?. 类型 - p (a -> b) (c -> d) -> p (a' -> b') (c' -> d')

这就是为什么我认为bifunctor有这样的类型(我是对的吗?)有一些例子

在此输入图像描述


UPDATE

在此输入图像描述


UPDATE2

p (a -> b) (c -> d) -> p (a' -> b') (c' -> d') 在上图中是从bifunctor到bifunctor和profunctor的态射(因为所有函数都是profunctors)

摘要:

我认为p (a -> b) (c -> d) -> p (a' -> b') (c' -> d')是函数的bifunctor,但事实并非如此.态射的Bifunctor是bimap. Type: (a -> b) -> (? -> ?) -> p a ? -> p b ?.

我认为这p (a -> b) (c -> d) -> p (a' -> b') (c' -> d')是不寻常的,但不是,它只是功能

lef*_*out 11

对象的Functor - 数据类型构造函数.类型 - a -> f a

函数的函数 - fmap.类型 - (a -> b) -> (fa -> fb)

虽然这很有意义,但重要的是要认识到上述箭头有三种不同的含义.

对象的Functor - 数据类型构造函数.类型 - a ? f a

函数的函数 - fmap.类型 - (a ? b) ? (f a ? f b)

哪里

  • ?是类型级别的"映射到符号",它将类型a与类型相关联f a.这与域和codomain的值级函数没有任何关系.(这些是在应用/ monad中找到的,但这是一个不同的故事.)af a
  • ?是一些态射的类型构造函数.在Hask类别中,那些态射恰好是Haskell函数,但这只是一个特例.
  • ? 是一个实际的函数类型构造函数.

你可能现在忘了后两者之间的区别,但??真的完全不同的概念.基本上,?就像你在lambda中写的箭头一样

Maybe :: Type -> Type
Maybe = \a ? Maybe a
Run Code Online (Sandbox Code Playgroud)

?只是表达你在功能事物上抽象的一种方式.

另一个可能不太清楚的相关事情是你所谈论的对象Haskell类型.不是值(作为OO对象).

所以,我会说出你上面给出的列表:

  • 函子

    • 对象:数据类型构造函数.种类Type -> Type,映射关联a ? f a.
    • 对于态射:fmap.类型:(a -> b) -> (f a -> f b).
  • Bifunctor

    • 对象:数据类型构造函数.种类Type×Type -> Type,或咖喱Type -> Type -> Type,映射关联a ? b ? p a b.
    • 对于态射:bimap.类型:(a -> b) -> (? -> ?) -> p a ? -> p b ?.

实际上,Haskell没有?或者你写的是什么a -> f a.这将是一个类型级别的lambda,但是类型级别的函数实际上只能表示为类型族,即你可以表达的最接近的a ? f atype instance Functored a = f a.