簡體   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