我注意到,在进行codegolf挑战时,默认情况下,GHC不会推断变量的最常规类型,当您尝试使用两种不同类型时会导致类型错误.
例如:
(!) = elem
x = 'l' ! "hello" -- From its use here, GHC assumes (!) :: Char -> [Char] -> Bool
y = 5 ! [3..8] -- Fails because GHC expects these numbers to be of type Char, too
Run Code Online (Sandbox Code Playgroud)
这可以使用pragma进行更改NoMonomorphismRestriction.
但是,将此键入GHCI不会产生类型错误,并且:t (!)在此处显示(Foldable t, Eq a) => a -> t a -> Bool,即使显式运行,也会假设-XMonomorphismRestriction.
为什么GHC和GHCI在假定最常用的函数类型方面有所不同?
(另外,为什么默认启用它?它有什么帮助?)