Extensibleのレコードを食わせて、レコードのキーと一致する環境変数があったら上書きして返す、ということをやってみた（まあ同僚の案なんだけど）。 型の理解にめっちゃ苦労した、というか未だにモヤっとしているんだけど、頑張ったのでアウトプットしておく。

Extensibleの使ったことがないとわからない話になるので、それでも読みたいという善良な方はExtensible攻略Wikiを先に読もう。 私も使い始めで全然理解できてはいないけど、めっちゃ便利でイケてるということはわかる。

レコードの型とデフォルトの値を定義する。 あとインポートとGHC拡張もここに全部載せちゃう。

環境変数のキーには慣習として大文字を用いるが、OverloadedLabels拡張では大文字始まりが許されていないので、あの便利な #hoge @= "fuga" という構文が使えない。 代わりに itemAssoc (Proxy @ "hoge") @= "fuga" を使う。記述量が増えるのはちょっと嫌だが仕方ない。

そして本題の上書き部分。