4

以下是 GHCi 的简短记录:

Prelude> :t read
read :: Read a => String -> a
Prelude> :t show
show :: Show a => a -> String
Prelude> :t show.read
show.read :: String -> String
Prelude> (show.read) "whales"
"*** Exception: Prelude.read: no parse

当我作曲时showread我只能假设 GHC 选择了一些既能ReadShow能成为“中间”类型的任意类型。

它是如何选择这种类型的,我有什么方法可以找出它是什么?

4

1 回答 1

14

GHCi 默认规则说选择的类型是(). 这是在需要Show实例时选择的默认类型。GHCi 将选择()一般约束、Integer数值或整数约束以及Double分数/其他实数约束。这不是由于一些 Haskell 固有的。这就是 GHCi 的实现方式,以便可以轻松地用作计算器。

如果你真的在一个文件中输入了代码并编译了它,就会应用更严格的 GHC 规则,你会得到一个错误,说无法解析中间类型。

您当然可以通过为其中一个函数指定类型来指示 GHC 使用不同的类型,例如:

show . (read :: String -> Int)
于 2012-09-18T23:24:30.197 回答