私は Haskell の初心者です。Haskell がレコード名のオーバーロードをサポートしていないことに気付きました:
-- Records.hs
data Employee = Employee
{ firstName :: String
, lastName :: String
, ssn :: String
} deriving (Show, Eq)
data Manager = Manager
{ firstName :: String
, lastName :: String
, ssn :: String
, subordinates :: [Employee]
} deriving (Show, Eq)
これをコンパイルすると、次のようになります。
[1 of 1] Compiling Main ( Records.hs, Records.o )
Records.hs:10:5:
Multiple declarations of `firstName'
Declared at: Records.hs:4:5
Records.hs:10:5
Records.hs:11:5:
Multiple declarations of `lastName'
Declared at: Records.hs:5:5
Records.hs:11:5
Records.hs:12:5:
Multiple declarations of `ssn'
Declared at: Records.hs:6:5
Records.hs:12:5
Haskell 型システムの「強さ」を考えると、どのフィールドにアクセスするかをコンパイラが簡単に判断できるように思われます。
emp = Employee "Joe" "Smith" "111-22-3333"
man = Manager "Mary" "Jones" "333-22-1111" [emp]
firstName man
firstName emp
私が見ていない問題はありますか?Haskell レポートがこれを許可していないことは知っていますが、なぜ許可しないのでしょうか?