Почему GHC не выдает предупреждение во время компиляции для исключения «Нет совпадений в селекторе записей»?

Когда я запускаю этот ошибочный код...

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" не предупредила меня об этой проблеме. Есть ли другой инструмент, который может помочь мне предотвратить ошибки такого типа?

11
задан Chris Martin 5 January 2017 в 06:18
поделиться