为了账号安全,请及时绑定邮箱和手机立即绑定

“字符串”应用于太多类型参数

“字符串”应用于太多类型参数

慕森王 2019-12-04 09:42:26
我只是在学习Haskell,并且试图编写一个简单的程序来消除。中的前n个字符String。这就是我得到的:cutString :: (Num n, String str) => n -> str -> strcutString 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
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

String 是类型,而不是类型类,因此您(必须)可以在类型签名中按原样使用它。


cutString :: Num n => n -> String -> String


查看完整回答
反对 回复 2019-12-04
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

作为参考,较旧的GHC(即7.2.2或更早版本)曾给出此更有用的错误:


Type constructor `String' used as a class

In the type `(Num n, String str) => n -> str -> str'

确实,这正是您的问题:String是类型,并且您将其用作类型类。类型类是类型的集合,而不是单个类型,例如Integer和Double和Rational都是属于类型类的所有类型Num。类型类显示=>在类型的左侧,其中实型和类型变量显示在的右侧=>。


查看完整回答
反对 回复 2019-12-04
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

该函数当然具有更简单的类型cutString :: Num n => n -> [a] -> [a]。而且,Num在这种情况下没有太大意义,所以也许类型Integral i => i -> [a] -> [a]甚至Int -> [a] -> [a]更好。 – dflemstr 12年  8月18日,13:39

@dflemstr我敢肯定你的


查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 443 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信