gpt4 book ai didi

haskell - 为什么我必须在这里指定类型?

转载 作者:行者123 更新时间:2023-12-04 22:10:29 25 4
gpt4 key购买 nike

我有以下代码:

class ToString a where
toString :: a -> String

instance ToString String where
toString a = a

instance ToString Char where
toString a = [a]

instance ToString Int where
toString a = show a

instance ToString Integer where
toString a = show a

instance ToString Float where
toString a = show a

instance ToString Double where
toString a = show a

我可以做 toString "Text"toString 't' 并且都编译得很好。但是,如果我执行 toString 5 我得到并出错。我被迫做 toString (5::Int)
show 不需要指定类型即可工作。当我查看 Show 的实现时,我没有看到任何神奇的东西:
instance Show Int where ... instance Show Integer where ...
我做错了什么需要我指定类型以及如何修复它?

更新:

我按照下面的建议添加了 {-# LANGUAGE ExtendedDefaultRules #-},它运行良好。解决了我的问题。

最佳答案

您需要指定类型,因为 5 在 Haskell 中是多态的:

λ> :type 5
5 :: Num a => a

所以编译器不知道选择哪个 Num 实例。但是,由于 extended defaulting ,这在 ghci 中确实有效:
λ> toString 5
"5"

关于haskell - 为什么我必须在这里指定类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39338899/

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