Tôi đang quan sát một hành vi thú vị khi sử dụng mô hình kết hợp với bảo vệ mô hình và tất cả các cảnh báo bậtCảnh báo rằng mô hình bảo vệ là không đầy đủ mặc dù nó là
{-# 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
Mặc dù flipMood
và flipMood'
đang làm khá nhiều cùng một điều tôi nhận được thông báo lỗi sau:
Mood.hs:15:1: Warning:
Pattern match(es) are non-exhaustive
In an equation for ‘flipMood'’: Patterns not matched: _
Ok, modules loaded: Mood.
và do đó cần phải thêm một nắm bắt tất cả các trường hợp như thế
| otherwise = mood
để đáp ứng bộ kiểm tra mức độ đầy đủ.
Lõi có vẻ là chỉ tốt với hai chức năng hành xử giống nhau:
flipMood =
\ ds_dTh ->
case ds_dTh of _ {
Happy -> Sad;
Indifferent -> Indifferent;
Sad -> Happy
}
flipMood' = flipMood
Với việc tối ưu tắt Tôi nhận được đầu ra cốt lõi sau đây mà dường như để giải thích hành vi này:
flipMood' =
\ mood_axV ->
case mood_axV of wild_X9 {
__DEFAULT ->
case wild_X9 of _ {
Indifferent -> Indifferent;
Sad -> Happy
};
Happy -> Sad
}
Tại sao nó có hoạt động theo cách này không? Tui bỏ lỡ điều gì vậy?
Kind regards, raichoo
Tôi đoán điều này giải thích mọi thứ :) – raichoo