查找并 return 第一个包含 char (Haskell) 的字符串

Find and return first string which contains char (Haskell)

我正在尝试编写一个循环遍历字符串列表的函数,如下所示:

["     |     ","     #     ","     *     ","     |     ","     #     "]

我正在尝试查找 return 第一个包含 '|', '#', or '*' 的元素,具体取决于用户的选择。

我想到了这个解决方案:

test :: Char -> [String] -> Maybe Char
test c (x:xs) = find (== c) $ concatMap (filter (/=' ')) (reverse xs)

我得到这个输出:

ghci> test '*' ["     |     ","     #     ","     *     ","     |     ","     #     "]
Just '*'

它找到了元素,但我希望它 return 元素而不改变它(删除空格)。如何在不过滤掉空格的情况下执行此操作?

这是我想要的输出:

ghci> test '*' ["     |     ","     #     ","     *     ","     |     ","     #     "]
"     *     "

由于您已使用 标记您的问题,

test :: Eq a => a -> [[a]] -> Maybe [a]
test c xs = listToMaybe [s | s <- xs, elem c s]

应该完成这项工作。

> test '*' ["     |     ","     #     ","     *     ","     |     ","     #     "]
Just "     *     "

> test '-' ["     |     ","     #     ","     *     ","     |     ","     #     "]
Nothing

> :i listToMaybe
listToMaybe :: [a] -> Maybe a   -- Defined in `Data.Maybe'