基本的haskell程序,用于在文件中查找字符串

pro*_*ach 1 haskell

这是我的第一次Haskell尝试,所以我的理解相当有限.我想编写一个非常基本的程序来检查文件是否包含该单词ERROR.我想出了以下内容,当然甚至都没有编译.

 import Text.Regex.Posix

 containsErrorString :: String -> Bool
 containsErrorString x = x =~ "ERROR" :: Bool

 fileContainsErrorString fileName = do
    s <- readFile fileName
    containsErrorString s
Run Code Online (Sandbox Code Playgroud)

这是正确的方法,如果没有,那么正确的方法是什么?

谢谢

Tho*_*son 5

轻重写

我建议:

  1. 使用Text而不是String任何"严肃"的工作.
  2. 如果您不需要正则表达式,请不要使用正则表达式.

在代码中:

import Data.Text as T

containsErrorString :: Text -> Bool
containsErrorString = ("ERROR" `T.isInfixOf`)

fileContainsErrorString :: FilePath -> IO Bool
fileContainsErrorString = containsErrorString `fmap` T.readFile

-- Warning, code typed and not tested.
Run Code Online (Sandbox Code Playgroud)

你的守则

你的方法没有任何问题.String对于大多数用途而言,使用仍然是常见且完全可接受 你的错误只是你忘记return了结果(你是monad IO,并且containsErrorString是一个纯函数).

代替:

containsErrorString s
Run Code Online (Sandbox Code Playgroud)

你应该有:

return (containsErrorString s)
Run Code Online (Sandbox Code Playgroud)