gpt4 book ai didi

haskell - 在我自己实现之前寻找一个标准的 Haskell 习语

转载 作者:行者123 更新时间:2023-12-01 07:54:53 24 4
gpt4 key购买 nike

我已经定义了一个数据类型 RuleFile我编写了一个函数来检查 Rulefile有许多谓词,随着它的进行积累警告字符串。

rfWarnings :: RuleFile -> [String]
rfWarnings rf = let warnings = [((\rf -> length (neigh rf) > 3), "warning: unknown extra information in the neighborhood, discarding it and moving on"),
<more warnings> ]
in <process> warnings
<process> 是否有现成的haskell 函数? ?或者也许我没有以惯用的haskell方式考虑这个问题,还有其他一些推荐的方法?我正在使用 Control.Monad.Except对于错误,但我目前的想法是我想单独处理警告并在 stderr 上输出消息。

稍后,我会将它用于诸如...
main :: IO ()
main = do
<some stuff>
ruleFiles <- <produce them>
mapM (hPutStr stderr) (map rfWarnings ruleFiles)
<other stuff>

最佳答案

您可以使用 Writer为了这:

import Control.Monad.Writer

rfWarnings rf = execWriter $ do
unless (length (neigh rf) <= 3) $ tell "Too much neigh!"
unless (isFrobulastic rf) $ tell "Frobulation mismatch!"

这样做的好处是非常容易组合 rfWarnings从较小的部分,例如
rfWarnings rf = execWriter $ do
unless (looksOK rf) $ tell "Completely b0rken!"
mapM_ partWarning (parts rf)

而且,我宁愿使用 unlesswhen因为我认为描述正确的状态比描述不正确的状态更好。

关于haskell - 在我自己实现之前寻找一个标准的 Haskell 习语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31104667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com