下面的程序類型檢查我的命令行(如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