函数替换与导入
Function substitution with an import
我是 Haskell 新手,正在使用 GHCi,版本 7.6.3
我试图理解为什么这个函数分配(或替换,无论正确的术语是什么)不起作用。
这段代码工作正常:
import qualified Data.List as L
testSort list = L.sort list
提示:
*Main> testSort [3,2,1]
[1,2,3]
但是,如果我像这样删除列表参数...
import qualified Data.List as L
testSort = L.sort
对我来说,直觉上可以用 L.sort 代替 testSort,然后我可以像以前一样在提示符下运行相同的命令并获得相同的结果。但是,我从 GHCi 中得到一个很大的错误:
No instance for (Ord a0) arising from a use of `L.sort'
The type variable `a0' is ambiguous
Possible cause: the monomorphism restriction applied to the following:
testSort :: [a0] -> [a0] (bound at modulesandbox.hs:4:1)
Probable fix: give these definition(s) an explicit type signature
or use -XNoMonomorphismRestriction
Note: there are several potential instances:
instance Integral a => Ord (GHC.Real.Ratio a)
-- Defined in `GHC.Real'
instance Ord () -- Defined in `GHC.Classes'
instance (Ord a, Ord b) => Ord (a, b) -- Defined in `GHC.Classes'
...plus 23 others
In the expression: L.sort
In an equation for `testSort': testSort = L.sort
有没有办法设置我的代码,使 testSort = L.sort
可以作为简单的函数替换?
可怕的monomorphism restriction再次来袭。
只需养成总是写出类型签名的习惯,那么这将永远不是问题。
testSort :: Ord a => [a] -> [a]
我是 Haskell 新手,正在使用 GHCi,版本 7.6.3
我试图理解为什么这个函数分配(或替换,无论正确的术语是什么)不起作用。
这段代码工作正常:
import qualified Data.List as L
testSort list = L.sort list
提示:
*Main> testSort [3,2,1]
[1,2,3]
但是,如果我像这样删除列表参数...
import qualified Data.List as L
testSort = L.sort
对我来说,直觉上可以用 L.sort 代替 testSort,然后我可以像以前一样在提示符下运行相同的命令并获得相同的结果。但是,我从 GHCi 中得到一个很大的错误:
No instance for (Ord a0) arising from a use of `L.sort'
The type variable `a0' is ambiguous
Possible cause: the monomorphism restriction applied to the following:
testSort :: [a0] -> [a0] (bound at modulesandbox.hs:4:1)
Probable fix: give these definition(s) an explicit type signature
or use -XNoMonomorphismRestriction
Note: there are several potential instances:
instance Integral a => Ord (GHC.Real.Ratio a)
-- Defined in `GHC.Real'
instance Ord () -- Defined in `GHC.Classes'
instance (Ord a, Ord b) => Ord (a, b) -- Defined in `GHC.Classes'
...plus 23 others
In the expression: L.sort
In an equation for `testSort': testSort = L.sort
有没有办法设置我的代码,使 testSort = L.sort
可以作为简单的函数替换?
可怕的monomorphism restriction再次来袭。
只需养成总是写出类型签名的习惯,那么这将永远不是问题。
testSort :: Ord a => [a] -> [a]