我正在读书LYAH http://learnyouahaskell.com/functors-applicative-functors-and-monoids。它说我需要显式加载Control.Monad.Instances
使以下语法起作用:
( ( fmap (+5) ) (+5) ) 4
这是为什么?如果函子是这种底层且统一的技术,为什么我必须显式加载Control.Monad.Instances
以获得该功能。如果没有它,(->) 是如何实现的(或者只是隐藏并且仅->
出口)?为什么不使用fmap
超过默认实现的函数类型?
这里涉及3个不同的概念。函数类型、Functor 类型类和 Functor“实例”。函数类型 (->) 是语言内置的,它的存在和实现与 Functor 和 fmap 完全无关。类型类是其关联方法的签名的规范。 “实例”是该签名的实现。
因此,为了使您的问题更清楚,我将其重新表述为“为什么 Prelude 中没有提供 (->) 的 Functor 实例?” (Prelude 是默认范围内的模块)。从目前的措辞来看,它没有多大意义。
修改后的问题的答案很简单:Haskell Report(官方语言规范,指定 Prelude 接口的地方)不包含它。可以说它应该,但从那时起 Haskell 语言和库已经发展了很多,并且 Haskell 标准往往变化缓慢。无论如何,无论对错,这就是原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)