Cal*_*vin 4 generics haskell type-inference typeclass ghci
这是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
Run Code Online (Sandbox Code Playgroud)
当我撰写时show
,read
我只能假设GHC选择了一些既Read
能够又Show
能够成为"中间"类型的任意类型.
它是如何选择这种类型的,有什么方法让我找出它是什么?
dfl*_*str 13
GHCi默认规则表明所选择的类型是()
.这是在Show
需要实例时选择的默认类型.GHCi将选择()
一般约束,Integer
数值或积分约束,以及Double
分数/其他实际约束.这不是由于一些Haskell内在的; 它就是如何实现GHCi,以便它可以作为计算器轻松使用.
如果您实际上已经在文件中输入了代码并对其进行了编译,则会应用更严格的GHC规则,并且您会收到一条错误消息,指出无法解析中间类型.
您当然可以通过给出一个类型的函数来指示GHC使用不同的类型,例如:
show . (read :: String -> Int)
Run Code Online (Sandbox Code Playgroud)