gpt4 book ai didi

Haskell - 奇怪的阻止行为

转载 作者:行者123 更新时间:2023-12-04 18:03:01 24 4
gpt4 key购买 nike

在阅读 时Haskell 维基百科 关于 MonadPlus ,我发现以下函数基本上采用 CharString并返回 Just (char,tail)如果这样的 char 等于字符串头,或者 Nothing除此以外:

char :: Char -> String -> Maybe (Char, String)
char c s = do
let (c':s') = s
if c == c' then Just (c, s') else Nothing

他们解释说 let (c':s') = s不会产生异常,因为它在 do 中计算结果为 Nothing 的 block 当模式失败时,但事实并非如此,因为当我尝试它时:
*Main> char 'a' ""
*** Exception: exercice2.hs:5:7-17: Irrefutable pattern failed for pattern (c' : s')

所以我不得不将其重写为:
char' :: Char -> String -> Maybe (Char, String)
char' _ [] = Nothing
char' c (c':s')
| c == c' = Just (c,s')
| otherwise = Nothing

它按预期工作......为什么会发生在我身上?

最佳答案

我认为维基是错误的。他们可能将此与绑定(bind)通过 fail 失败的事实混淆了。函数Monad提供。所以下面的例子将使用 fail函数来自 Maybe ,返回 Nothing :

char :: Char -> String -> Maybe (Char, String)
char c s = do
(c':s') <- return s
if c == c' then Just (c, s') else Nothing

关于Haskell - 奇怪的阻止行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39968972/

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