gpt4 book ai didi

haskell - 为什么默认情况下不使用 Control.Monad.Instances 实现 (->)

转载 作者:行者123 更新时间:2023-12-04 17:05:00 25 4
gpt4 key购买 nike

我正在阅读 LYAH .它说我需要显式加载 Control.Monad.Instances使以下语法起作用:

( ( fmap (+5) ) (+5) ) 4

这是为什么?为什么如果仿函数是这种底层和统一的技术,我必须显式加载 Control.Monad.Instances获得该功能。没有它 (->) 是如何实现的(或者只是隐藏并且仅 -> 导出)?为什么不使用 fmap超过默认实现的函数类型?

最佳答案

这里涉及 3 个不同的概念。函数类型、Functor 类型类和 Functor“实例”。函数类型 (->) 是语言内置的,它的存在和实现与 Functor 和 fmap 完全无关。类型类是其关联方法的签名规范。 “实例”是该签名的实现。

因此,为了使您的问题更清楚,我将其重新表述为“为什么 Prelude 中没有提供 (->) 的 Functor 实例?” (Prelude 是默认范围内的模块)。按照目前的说法,它没有多大意义。

修改后的问题的答案很简单:Haskell 报告(官方语言规范,指定 Prelude 的界面)不包括它。可以说它应该,但从那时起,Haskell 语言和库已经发展了很多,而且 Haskell 标准往往变化缓慢。无论如何,对或错,这就是原因。

关于haskell - 为什么默认情况下不使用 Control.Monad.Instances 实现 (->),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4211150/

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