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