首先,我是Haskell的新手,所以如果我问一些愚蠢的问题,请告诉我如何做得更好。谢谢 :)
我的任务是获取符合特定条件的字符串列表。如果没有符合条件的字符串,我想评估为Nothing。所以我写了两个函数:
isSpecialLine :: String -> String -> Maybe Bool
isSpecialLine t s = Just $ (("[" ++ t ++ ":") `isPrefixOf` s) && ("]::" `isSuffixOf` s)
getLinesWith :: String -> String -> Maybe [String]
getLinesWith t = filterM (isSpecialLine t) . lines
Run Code Online (Sandbox Code Playgroud)
这段代码有效,但是我发现这Maybe Bool看起来有点奇怪。嘿,是二进制文件!它始终为Trueor False,因此value isSpecialLine始终为Just Trueor Just False。就Nothing我而言,绝对不可能!
但是,如果我将isSpecialLine输出类型更改为Bool,则会出现以下问题:filterMExpects Maybe Bool而不是Bool。
好的,我这样做:
getLinesWith :: String …Run Code Online (Sandbox Code Playgroud)