gpt4 book ai didi

haskell - haskell中函数的双仿函数在哪里?

转载 作者:行者123 更新时间:2023-12-03 15:02:55 24 4
gpt4 key购买 nike

我找不到 fmap 的双仿函数模拟。

解释:

对象的仿函数 - 数据类型构造函数。类型 -a -> f a
函数的仿函数 - fmap .类型 - (a -> b) -> (fa -> fb)
对象的双仿函数 - bimap f g 的结果, 其中 f :: (a -> a') , g :: (b -> b') .类型 - p a b -> p a' b'
函数的双仿函数 - ?。类型 - p (a -> b) (c -> d) -> p (a' -> b') (c' -> d')
这就是为什么我认为双仿函数具有这种类型(对吗?)并举了一些例子

enter image description here

更新

enter image description here

更新2
p (a -> b) (c -> d) -> p (a' -> b') (c' -> d')上图中是从双仿函数到双仿函数以及前仿函数的态射(因为所有函数都是仿函数)

概括:

我想过p (a -> b) (c -> d) -> p (a' -> b') (c' -> d')是函数的双仿函数,但不是。态射的双仿函数是 bimap. Type: (a -> b) -> (α -> β) -> p a α -> p b β.
我想过p (a -> b) (c -> d) -> p (a' -> b') (c' -> d')是一些不寻常的东西,但它不是,它只是功能

最佳答案

Functor for objects - datatype constructor. Type - a -> f a

Functor for functions - fmap. Type - (a -> b) -> (fa -> fb)


尽管这具有广泛的意义,但重要的是要认识到上面的箭头具有三种不同的含义。

Functor for objects - datatype constructor. Type - a ⟼ f a

Functor for functions - fmap. Type - (a ⟿ b) ⟶ (f a ⟿ f b)


在哪里
  • 是与类型 a 相关联的类型级“映射到符号”类型为 f a .这与域为 a 的值级函数无关。和共域 f a . (这些可以在应用程序/单子(monad)中找到,但那是另一回事。)
  • 是一些态射的类型构造函数。在 哈斯克类别,那些态射恰好是 Haskell 函数,但这只是一个特例。
  • 是一个实际的函数类型构造函数。

  • 您现在可能忘记了后两者之间的区别,但是 在概念上确实完全不同†。基本上, 就像你在 lambda 中写的箭头
    Maybe :: Type -> Type
    Maybe = \a ⟼ Maybe a
    只是一种表达您对功能事物进行抽象的方式。
    另一个可能不清楚的相关事情是您正在谈论的对象是 Haskell 类型。不是值(就像 OO 对象一样)。
    所以,我会这样说你在上面给出的 list :
  • 仿函数
  • 对于对象:数据类型构造函数。实物Type -> Type , 映射关联 a ⟼ f a .
  • 对于态射:fmap .类型:(a -> b) -> (f a -> f b) .

  • 双仿函数
  • 对于对象:数据类型构造函数。实物Type×Type -> Type , 或 curry 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 .

    关于haskell - haskell中函数的双仿函数在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51396793/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com