gpt4 book ai didi

haskell - 在 Haskell 中使用 Read 和 Show 时(缺乏)二义性类型

转载 作者:行者123 更新时间:2023-12-04 23:49:19 26 4
gpt4 key购买 nike

我写了一个非常简单的 Haskell 程序:

main = print $ sum $ map read ["55", "99", "101"]

鉴于我过去的经验,我预计会得到一个“歧义类型”错误,因为 sum $ map read [...] 的签名是 (Read a, Num a) => a ; Num是一个类,因此本身不能实现 Show类(class)。但是,程序正确输出了“255”。怎么样 print能够确定产生输出的方法吗? ( show 也能够产生正确的结果,没有错误。)

最佳答案

如果您使用 -fwarn-type-defaults你会得到这个选项:

$ ghc -O2 -fwarn-type-defaults ddd.hs
[1 of 1] Compiling Main ( ddd.hs, ddd.o )

ddd.hs:2:8: Warning:
Defaulting the following constraint(s) to type ‘Integer’
(Show s0) arising from a use of ‘print’ at ddd.hs:2:8-12
(Read s0) arising from a use of ‘read’ at ddd.hs:2:26-29
(Num s0) arising from a use of ‘sum’ at ddd.hs:2:16-18
In the expression: print
In the expression: print $ sum $ map read ["55", "99", "101"]
In an equation for ‘main’:
main = print $ sum $ map read ["55", "99", "101"]

这解释了发生了什么。

关于haskell - 在 Haskell 中使用 Read 和 Show 时(缺乏)二义性类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26559266/

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