“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 

2 Solutions collect form web for ““string”应用于太多的types参数”

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,例如IntegerDoubleRational是属于typesNum所有types。 types类出现在types的左侧=> ,其中实型和typesvariables出现在=>右侧。

  • Haskell与Prolog的比较
  • 用Monad变形金刚避免电梯
  • 用不同数量的参数定义一个函数
  • 为什么3和x(被分配了3)在Haskell中有不同的推断types?
  • 不同types的列表?
  • Cabal在需要分析库时不安装依赖关系?
  • 为什么recursion“让”使空间有效率?
  • 应用性parsing与单体parsing有什么好处?
  • 在haskell中定义一个新monad不会引发Applicative的实例
  • 理解一个recursion定义的列表(以zipWith为单位的fibs)
  • 这个fibonacci函数是如何记忆的?