このバグのあるコードを実行すると...
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」を使用してコンパイルしても、この問題について警告が表示されなかったのはなぜでしょうか。この種のエラーを防ぐのに役立つ別のツールはありますか?