lensのコード生成時にフィールド名をアンダースコアで始める必要は無かった
昔はあんまり好きじゃなかったlensをamazonkaの使用とともに受け入れ始めました。
HaskellとJSON、そしてレコード型 - syocy’s diary
を見て、
makeFields
のプレフィクス除去良いなあと思いました。
でもフィールド名をアンダースコアで始めるとlens専用のインターフェイスみたいになって、純粋なHaskellのレコード操作が奇妙な感じになるので、 lensだけを使うことを決断しないと使いにくいよねと感じてlensインターフェイスを作るのを躊躇していました。
しかしそれは私の勘違いで、別にフィールドをアンダースコアで始めなくてもコード生成が行われました。
以下のようなコードで実現可能です。
-- | The multi way bi tree.
-- 複数の子を持つ可能性があり、子の左右を区別するツリー。
data MwbTree a
= MwbTree
{ -- | トップレベルデータ。
-- フィールドに正格評価を採用しているので先頭でなくても良いのですが、
-- Lazyな表記に慣れても違和感を感じないように、
-- 中央ではなくトップレベルに持ってきています。
mwbTreeLabel :: !a
-- | 左要素
, mwbTreeLeft :: ![MwbTree a]
-- | 右要素
, mwbTreeRight :: ![MwbTree a]
} deriving (Eq, Ord, Show, Read, Generic)
makeFields ''MwbTree
この場合MwbTree
ではなくMWBTree
としてしまうとcamelCaseとして認識されずにうまいこと生成されないので注意が必要です。