我只是在学习Haskell而我正在尝试编写一个简单的程序来消除a中的前n个字符String.这就是我得到的:
cutString :: (Num n, String str) => n -> str -> str
cutString n str = case n of
0 -> tail str
n -> cutString (n-1) (tail str)
Run Code Online (Sandbox Code Playgroud)
虽然GHC给了我这个错误,我无法弄清楚原因:
`String' is applied to too many type arguments
In the type signature for `cutString':
cutString :: (Num n, String str) => n -> str -> str
Run Code Online (Sandbox Code Playgroud)
Dan*_*ner 53
String 是一个类型,而不是类型类,所以你可以(必须)只在类型签名中使用它.
cutString :: Num n => n -> String -> String
Run Code Online (Sandbox Code Playgroud)
Ben*_*ood 33
作为参考,旧的GHC(即7.2.2或更早版本)用于提供这个更有用的错误:
Type constructor `String' used as a class
In the type `(Num n, String str) => n -> str -> str'
Run Code Online (Sandbox Code Playgroud)
确实这正是你的问题:String是一种类型,你将它用作类型类.类型类是类型的集合,而不是单个类型,例如Integer,Double并且Rational属于类型类的所有类型Num.类型类显示=>在类型的左侧,其中实数类型和类型变量显示在右侧=>.
| 归档时间: |
|
| 查看次数: |
11335 次 |
| 最近记录: |