这是我的第一次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)
这是正确的方法,如果没有,那么正确的方法是什么?
谢谢
轻重写
我建议:
Text而不是String任何"严肃"的工作.在代码中:
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)
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |