“string”应用于太多的types参数
我只是在学习Haskell,我正在编写一个简单的程序来消除String
的前n个字符。 这是我得到的:
cutString :: (Num n, String str) => n -> str -> str cutString n str = case n of 0 -> tail str n -> cutString (n-1) (tail str)
GHC给了我这个错误,但我不明白为什么:
`String' is applied to too many type arguments In the type signature for `cutString': cutString :: (Num n, String str) => n -> str -> str
String
是一种types,而不是一个typestypes,所以你可以(必须)只是在types签名中使用它。
cutString :: Num n => n -> String -> String
作为参考,以前的GHCs(即7.2.2或更早的版本)曾用来给出这个更有帮助的错误:
Type constructor `String' used as a class In the type `(Num n, String str) => n -> str -> str'
事实上,这正是你的问题: String
是一种types,你正在使用它作为一个types的类。 types类是types的集合,而不是单一types,例如Integer
和Double
, Rational
是属于typesNum
所有types。 types类出现在types的左侧=>
,其中实型和typesvariables出现在=>
右侧。