gpt4 book ai didi

haskell - 为什么这个表达式有一个有效的类型?

转载 作者:行者123 更新时间:2023-12-03 06:19:50 25 4
gpt4 key购买 nike

ghci 中闲逛,我碰巧注意到表达式 (*) 1 [1..5] 显然有一个有效的类型。

:t (*) 1 [1..5]
(*) 1 [1..5] :: (Enum t, Num [t], Num t) => [t]

显然这是一个具有多个类型约束的列表,包括 Num [t] 这对我来说看起来不可能,就像它应该给出错误一样。

这个表达式的类型是怎样的?为什么 ghci:t 命令在这里没有给出错误?

最佳答案

Num [t] 不仅可能,而且很简单:

import Control.Applicative
liftA0 = pure -- hobgoblins, simple minds, etc.
liftA1 = fmap
instance Num t => Num [t] where
(+) = liftA2 (+)
(-) = liftA2 (-)
(*) = liftA2 (*)
negate = liftA1 negate
abs = liftA1 abs
signum = liftA1 signum
fromInteger n = liftA0 (fromInteger n)

因此,如果 GHC 产生错误而不是推断您的表达式可以通过适当的实例正确键入,那将是非常糟糕的。

当然,用真实代码编写这个实例也是很糟糕的,但 GHC 不应该像我们人类那样对代码进行判断。

关于haskell - 为什么这个表达式有一个有效的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46231446/

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