“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出现在=>右侧。

  • 撰写function组合:(。)。(。)如何工作?
  • 什么是箭头,我怎样才能使用它们?
  • Haskell中一个现有的大小 - 惰性向量types
  • Reader Monad的目的是什么?
  • Haskell中`mod`和`rem`的区别
  • function性镜头
  • 什么是虚空?
  • 是否有更好的方法在Haskell中有可选的参数?
  • 为什么没有关于Haskell(与Scala或C#相对)的协变和反变化的讨论?
  • “const id”的行为
  • 简单的例子来说明类别,Monoid和Monad?