HaskellのRecordの問題点
field名が重複するrecordを定義できない
code:hs
data A = A { field :: String }
data B = B { field :: String }
部分的である
code:hs
data A = A1 { field1 :: String } |
A2 { field2 :: String }
main = print $ field1 $ A2 "abc"
A2コンストラクタはfield1を持たないのでこのコードは実行時エラーになる
静的に解決できそうだがエラーにならない
コンストラクタ間で異なる型に同盟のfieldを定義できない
code:hs
data A = A1 { field :: String } |
A2 { field :: Int }
ネストしたrecordの更新が大変
code:hs
addManStk team = team {
manager = (manager team) {
diet = (diet (manager team)) {
steaks = steaks (diet (manager team)) + 1
}
}
}