gpt4 book ai didi

haskell - Haskell中的`(a -> b) -> (c -> d)`?

转载 作者:行者123 更新时间:2023-12-04 13:18:26 44 4
gpt4 key购买 nike

这是又一个 Haskell-through-category-theory 问题。

让我们以一个简单而众所周知的事情为例。 fmap ?
所以fmap :: (a -> b) -> f a -> f b , 省略了 f实际上是一个Functor .据我了解,(a -> b) -> f a -> f b只不过是一个语法糖 对于(a -> b) -> (f a -> f b) ;因此得出结论:

(1) fmap是产生函数的函数。

现在,哈斯克也包含函数,所以 (a -> b)尤其是 (f a -> f b)一个对象 Hask 的对象(因为 Hask 的对象是定义明确的 Haskell 类型 - 也就是数学集 - 并且对于每个可能的 (a -> b) 确实存在 a 类型的集合,对吗?)。所以,再一次:

(2) (a -> b)是 Hask 的一个对象。

现在奇怪的事情发生了:fmap , 显然是 态射 Hask的,所以它是一个函数,它接受另一个函数并将其转换为另一个函数; 最终功能尚未应用 .

因此,需要一个 Hask 态射才能从 (f a -> f b) 得到。到f b .对于每个项目i类型 a存在态射apply_i :: (f a -> f b) -> f b定义为 \f -> f (lift i) , 其中 lift i是一种构建 f a 的方法特别是 i里面。

另一种查看方式是GHC -风格:(a -> b) -> f a -> f b .与我上面写的相比,(a -> b) -> f a是映射到 Hask 的常规对象。但是这种观点与基本的 Haskell 公理相矛盾——没有多元函数,而是应用(柯里化(Currying))替代方案。

我现在想问一下:是(a -> b) -> f a -> f b假设是 (a -> b) -> (f a -> f b) -> f b ,为了简单而加糖,还是我错过了一些非常非常重要的东西?

最佳答案

is (a -> b) -> f a -> f b suppose to be an (a -> b) -> (f a -> f b) -> f b, sugared for simplicity



不,我认为你缺少的,并不是你的错,只是 (a -> b) -> (f a -> f b) 中的中间箭头只是一个非常特殊的情况。可以和外层 (a -> b) -> (f a -> f b) 一样称为态射能够。 Functor 类的一般情况是(在伪语法中)
class (Category (──>), Category (~>)) => Functor f (──>) (~>) where
fmap :: (a ──> b) -> f a ~> f b

因此,它将态射映射到箭头标记为 ──> 的类别中。到类别 ~> 中的态射,但是这个态射映射本身只是一个简单的函数。您的权利,在 哈斯克具体来说,函数箭头与态射箭头是同一种箭头,但从数学上讲,这是一个相当退化的场景。

关于haskell - Haskell中的`(a -> b) -> (c -> d)`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53886406/

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