下面的程序类型检查我的命令行(如ghci file.hs
)上指定它:ghci - 渴望在交互模式下编译?如果
import Data.Ratio
foo = let x = [1..]
y = (1%2) + (head x)
in y
但是,如果我交互输入它,我会得到一个错误类型:
Prelude> import Data.Ratio
Prelude Data.Ratio> let x = [1..]
Prelude Data.Ratio> let y = (1%2) + (head x)
<interactive>:1:23:
Couldn't match expected type `Ratio a0' with actual type `Integer'
它似乎x
正在热切地输入为[Integer]
,而不是更一般的(Num t, Enum t) => [t]
。
我能做些什么吗?是否有其他情况下交互模式与批处理模式不同?
单态的限制... – augustss 2012-02-28 22:32:17
并键入违约 – Ptival 2012-02-28 22:43:49
事实上,这是可怕的单态的限制。有两种方法:给出明确的签名或关闭这个限制(在GHCi中,你可以执行':set -XNoMonomorphismRestriction'并完成了;语言编译指示和编译器标志也起作用)。 – Vitus 2012-02-28 22:52:07