gpt4 book ai didi

haskell - 警告模式保护并非详尽无遗,即使它是

转载 作者:行者123 更新时间:2023-12-03 11:55:26 25 4
gpt4 key购买 nike

当使用带有模式保护的模式匹配并且所有警告都打开时,我观察到一个有趣的行为

{-# OPTIONS_GHC -Wall #-}
module Mood where

data Mood = Happy
| Indifferent
| Sad
deriving Show

flipMood :: Mood -> Mood
flipMood Happy = Sad
flipMood Indifferent = Indifferent
flipMood Sad = Happy

flipMood' :: Mood -> Mood
flipMood' mood
| Happy <- mood = Sad
| Indifferent <- mood = Indifferent
| Sad <- mood = Happy

即使 flipMoodflipMood'几乎在做同样的事情我收到以下错误消息:
Mood.hs:15:1: Warning:
Pattern match(es) are non-exhaustive
In an equation for ‘flipMood'’: Patterns not matched: _
Ok, modules loaded: Mood.

因此需要添加一个 catch all case 比如
| otherwise = mood

来满足穷举检查器。

Core 似乎很好,这两个函数的行为相同:
flipMood =
\ ds_dTh ->
case ds_dTh of _ {
Happy -> Sad;
Indifferent -> Indifferent;
Sad -> Happy
}

flipMood' = flipMood

关闭优化后,我得到以下核心输出,这似乎可以解释这种行为:
flipMood' =
\ mood_axV ->
case mood_axV of wild_X9 {
__DEFAULT ->
case wild_X9 of _ {
Indifferent -> Indifferent;
Sad -> Happy
};
Happy -> Sad
}

为什么会这样?我错过了什么吗?

亲切的问候,
来秋

最佳答案

有长10岁ticket关于那个。基本上:在 ghc 中的详尽检查正在等待英雄。

补充:该问题今天已关闭。我刚刚检查过,代码不再产生非详尽的警告。希望它将成为 ghc-8.0 的一部分.

关于haskell - 警告模式保护并非详尽无遗,即使它是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28454860/

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