【发布时间】:2018-08-13 03:59:59
【问题描述】:
我目前正在与 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 的行。 Nothing 属于 Maybe a 类型,其中运算符 <*> 实际上需要 f (a -> b)(在本例中为 Maybe (a -> b))作为其第一个参数的类型。因此,这是 Haskell 应该抱怨的类型不匹配。但是,这被接受为默认定义,因此 Haskell 不会在我认为应该抱怨的地方抱怨它。
我错过了什么?
【问题讨论】:
标签: haskell types applicative