[英]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.