Ja obserwując ciekawy wzór zachowań podczas korzystania z osłon dopasowanie wzoru i wszystkie ostrzeżenia włączonyostrzeżenie, że straż wzór nie jest wyczerpująca, mimo że jest
{-# 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
Nawet flipMood
i flipMood'
są dość dużo robi samo pojawia się następujący komunikat o błędzie:
Mood.hs:15:1: Warning:
Pattern match(es) are non-exhaustive
In an equation for ‘flipMood'’: Patterns not matched: _
Ok, modules loaded: Mood.
i dlatego trzeba dodać złapać wszystkie sprawy jak
| otherwise = mood
w celu spełnienia sprawdzenia kompletności.
rdzeń wydaje się być w porządku ze te dwie funkcje zachowuje się tak samo:
flipMood =
\ ds_dTh ->
case ds_dTh of _ {
Happy -> Sad;
Indifferent -> Indifferent;
Sad -> Happy
}
flipMood' = flipMood
Dzięki optymalizacji wyłączony uzyskać następujące wyjście rdzeń, który wydaje się wyjaśnić to zachowanie:
flipMood' =
\ mood_axV ->
case mood_axV of wild_X9 {
__DEFAULT ->
case wild_X9 of _ {
Indifferent -> Indifferent;
Sad -> Happy
};
Happy -> Sad
}
Dlaczego czy zachowuje się w ten sposób? Czy czegoś brakuje?
pozdrowienia rodzaju, raichoo
To chyba wyjaśnia rzeczy :) – raichoo