generated at
NoFieldSelectors
HaskellのRecordのfieldをgetterとして定義する機能を無効化する


@fumieval氏が実装している


何が変わるのか
NoFieldSelectors を使わない通常のRecordでは
hs
data Foo = FooC { baz :: Int }
このような型を定義すると以下のものが導入される
① 型 Foo
② Constructor Fooc
③ 構築の為の baz
hs
foo1 = Foo { baz = 1 }
④ 更新の為の baz
hs
update :: Foo -> Int -> Foo update foo newId = foo { baz = newId }
これって、言語的には③と同じなのかなmrsekut
⑤パターンマッチの為の baz
hs
patt = \case Foo { baz = 1 } -> ... ...
⑥ getterの為の baz
hs
get :: Foo -> Int get = baz
NoFieldSelectors を有効にすると、⑥が無効化される


何が嬉しいのか
getterを無効化するので、そのfieldの値にはアクセスできなくなる
それは困るので、他の拡張と併用して使うことになる
例えばRecordDotSyntaxとか


exportとの兼ね合い



OverloadedLabelsなどの問題はどうなるかのか
もし、NoFIeldSelectorsによって↑この辺が不要になるのであれば、その旨の各ノートにメモっておきたい
この辺の拡張がどういうものなのか知らないのでわからないmrsekut



参考