以下のようにレコード構文(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 などと怒られてしまったので、使いどころが難しく感じました。
hoge a
でより簡潔に、a のフィールド hoge にアクセスできる」 、ということですね。 また、値を作るときには「順番が合っていれば field 名が省略できる」わけですか。なるほど。Record syntax は糖衣構文(Syntax Sugar) のような振る舞いに見えます。
– tobynet Jan 25 '15 at 23:49