Haskell の レコード構文(Record Syntax) にて、より簡潔にフィールド(field)にアクセスする方法はありませんでしょうか。
以下のようにレコード構文(Record Syntax)にて独自の名前付きフィールド(Named Fields)らを定義し、フィールド(Field)の一部を利用する場合に、より簡潔な方法はありませんでしょうか?
下記のコードでいえば fNumField Foo{hoge = x} = x ^ 2
の部分が粗雑に感じます。
data Foo = Foo{ bar :: String , hoge::Integer} deriving (Show)
main = do
print $ fNumField a
where
fNumField Foo{hoge = x} = x ^ 2
a = Foo{ bar = "piyo", hoge = 575 }
※ (別の質問の方がいいのかもしれませんが) F# や OCamlのような言語と違い「名前付きフィールド」が Haskell には似合わないような気がしています。通常はどうかくものなのでしょうか?
※ 「命名規則や用語がHaskell的に変だ!」という場合もぜひ、コメントや編集などでフィードバックお願いします!
追記 : 2015-01-26
回答を参考に修正してみました。
data Foo = Foo{ bar :: String , hoge::Integer} deriving (Show)
main = print $ hoge a ^ 2
where
a = Foo{ bar = "piyo", hoge = 575 }
※ hoge の定義がかぶった場合はコンパイル時に Multiple declarations などと怒られてしまったので、使いどころが難しく感じました。