DuplicateRecordFields
このように定義できる
hs{-# LANGUAGE DuplicateRecordFields #-}
data Foo = Foo { hoge :: Int }
data Bar = Bar { hoge :: Float }
ただし利用時には型を明記する必要がある
hsmain = do
let x = Foo 1
print $ hoge (x :: Foo) -- ok
print $ hoge x -- error
自前のgetterを定義したらこんな感じになる
hsfooHoge = hoge -- (もちろん)error
hsfooHoge :: Foo -> Int
fooHoge foo = hoge (foo :: Foo) -- ok
hsfooHoge :: Foo -> Int
fooHoge = hoge -- ok
HsfooHoge :: Foo -> Int
fooHoge foo = hoge foo -- error
なんで最後のあかんねや

パターンマッチとかは理想通り使える
hsf Foo {hoge = hoge} = hoge