haskell中是否有包含字符串和列表的类型?

Amb*_*ber 2 haskell types

现在我正在尝试创建一个基本函数来删除句子中的任何空格或逗号。

stringToIntList :: [Char] -> [Char]
stringToIntList inpt = [ a | a <- inpt, a `elem` [" ",","]]
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,我尝试过的每种类型都不起作用,如果我输入 [Char] ,它会在逗号处出现问题,如果我输入 [string] ,它会在空格处出现问题,如果我输入字符串,它就会出现问题无法识别 a 并说这是一个错误。所以我想知道是否有某种类型可以同时用作 [Char] 和 [string]。

lef*_*out 7

对于当前类型,定义需要是

stringToIntList inpt = [ a | a <- inpt, a `elem` [' ',',']]
Run Code Online (Sandbox Code Playgroud)

(单引号,因为这些是Char文字,而不是String!),
或者

stringToIntList inpt = [ a | a <- inpt, a `elem` " ,"]
Run Code Online (Sandbox Code Playgroud)

(使用字符串只是字符列表的事实),
或者简单地

stringToIntList = filter (`elem` " ,")
Run Code Online (Sandbox Code Playgroud)

请注意,这不会删除空格和逗号,相反,这些是它保留的唯一字符。要删除它们,您需要反转谓词:

stringToIntList = filter $ not . (`elem` " ,")
Run Code Online (Sandbox Code Playgroud)

正如iceland_jack评论的那样,这种组合实际上有一个标准函数:

stringToIntList = filter (`notElem` " ,")
Run Code Online (Sandbox Code Playgroud)

如果您确实想要,a `elem` [" ",","]那么您的函数的类型需要是

stringToIntList :: [String] -> [String]
Run Code Online (Sandbox Code Playgroud)

或同等的[[Char]] -> [[Char]]

  • 有一个 `notElem = not 。elem` 函数,如果没有使用该名称,最好有 `keep = filter` 和 `drop = (&gt;&gt;&gt; not) &gt;&gt;&gt; filter` (2认同)