繁体   English   中英

Haskell:无法将类型'Char'与'[Char]'匹配

[英]Haskell: Couldn't match type ‘Char’ with ‘[Char]’

我是Haskell的初学者,我正在努力使用函数来修改列表,然后将其返回到字符串。 我遇到了这个错误。 有什么建议吗?

无法将类型'Char'与'[Char]'相匹配

预期类型:字符串

实际类型:字符

createIndex:: String -> String
createIndex str = unLine (removeT (splitLines str))

splitLines:: String -> [String]
splitLines splitStr = lines splitStr

removeT:: [String] -> [String]
removeT strT = filter (=='t') strT

unLine:: [String] -> String
unLine unLinedStr = unlines unLinedStr

问题出在您的removeT定义中。 removeT的类型是[String] -> [String] ,这意味着它适用于字符列表。 然后,在filter ,将每个字符列表(即列表中的每个String )与一个Char't' )进行比较。 不允许这样做(您不能检查其他类型的值是否相等)。

如何更改代码实际上取决于您打算做什么。 是否要删除包含t的行,是否要保留包含t的行,是否要删除t或是否要保留t尚不完全清楚。 根据您要实现的目标,必须对代码进行相应的修改。

一些指针:

  • 如果将removeT的类型更改为removeT String -> String ,则可以一次查看一行。 然后,你将不得不更换removeT在定义createIndex通过map removeT (因为你申请的功能,每行))。 在这种情况下,过滤器将处理Char值,因此允许与“ t”进行比较。

  • 如果您想对包含t的行进行处理,则(== 't')并非('t' `elem`) ,您将需要使用('t' `elem`) (意思是“'t'是”的元素) 。

  • filter器使元素与谓词匹配。 因此,例如,如果要从字符串中删除t,请使用filter (/= 't')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM