DuplicateRecordFields
このように定義できる
code:hs
{-# LANGUAGE DuplicateRecordFields #-} data Foo = Foo { hoge :: Int }
data Bar = Bar { hoge :: Float }
ただし利用時には型を明記する必要がある
code:hs
main = do
let x = Foo 1
print $ hoge (x :: Foo) -- ok
print $ hoge x -- error
自前のgetterを定義したらこんな感じになる
code:hs
fooHoge = hoge -- (もちろん)error
code:hs
fooHoge :: Foo -> Int
fooHoge foo = hoge (foo :: Foo) -- ok
code:hs
fooHoge :: Foo -> Int
fooHoge = hoge -- ok
code:Hs
fooHoge :: Foo -> Int
fooHoge foo = hoge foo -- error
なんで最後のあかんねやmrsekut.icon
パターンマッチとかは理想通り使える
code:hs
f Foo {hoge = hoge} = hoge