Когда я запускаю этот баггированный код...
data Person = Adult { pName :: String}
| Kid { pName :: String
, pAge :: Int
} deriving Show
getAge :: Person -> Int
getAge p = pAge p
getName :: Person -> String
getName p = pName p
main :: IO ()
main = do
let p1 = Kid "fred" 5
p2 = Adult "john"
ps = [p1, p2]
names = map getName ps
ages = map getAge ps
putStrLn $ "names: " ++ show names
putStrLn $ "ages: " ++ show ages
... Я получаю это в ghci:
names: ["fred","john"]
ages: [5,* * * Exception: No match in record selector pAge
Я знаю, как избежать этой ошибки, но мне интересно, почему компиляция с помощью "ghc -Wall" не предупредила меня об этой проблеме. Есть ли другой инструмент, который может помочь мне предотвратить этот тип ошибок?