gpt4 book ai didi

haskell - 我认为 Haskell 中的 Applicative Maybe 实例中的默认定义存在类型不匹配

转载 作者:行者123 更新时间:2023-12-04 13:21:50 25 4
gpt4 key购买 nike

我目前正在与 Hutton 教授的“Haskell 编程”一起学习 Haskell,我发现将 Maybe 定义为 Applicative 类的实例有些奇怪。

GHC.Base , 实例 Applicative Maybe定义如下:

instance Applicative Maybe where
pure = Just

Just f <*> m = fmap f m
Nothing <*> _m = Nothing

它是定义 Nothing <\*> _ 值的行如 Nothing这让我很困扰。 NothingMaybe a 类型, 其中运算符 <*>实际上需要 f (a -> b) (在本例中为 Maybe (a -> b) )作为其第一个参数的类型。因此,这是 Haskell 应该提示的类型不匹配。但是,这被接受为默认定义,因此 Haskell 不会在我认为应该提示的地方提示它。

我错过了什么?

最佳答案

aMaybe a是一个类型变量,可以是任何类型!所以Nothing可以有类型 Maybe Int , 或 Maybe [x] , 或 Maybe (p -> q) , 例如。
不要对变量名 a 感到困惑。用在两个地方。 a类型为 Nothing是与 a 完全不同的变量类型为 <*> ,而且恰好同名!

(这与你写 f x = x + 5 然后在其他地方写 g x = "Hello, " ++ x 完全相同。在这两个地方使用 x 并不重要,因为它们在不同的范围内。与此类型中的 a 相同.不同的作用域,所以它们是不同的变量。)

关于haskell - 我认为 Haskell 中的 Applicative Maybe 实例中的默认定义存在类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51815025/

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