はじめに

TwitterRecordWildCards の話が流れて来たので Reader モナドと組み合わせた例を1つご紹介します。

この書き方は @fumieval さんが使っていてカッコイイ書き方だなぁと思った記憶があります。

RecordWildCards に関しては既に色んな方が記事にしてくれているので、そちらをご参照ください。

具体例

あまり良い例が思いつかなかったのですが、 Env に必要な情報を持たせておけば任意のタイミングで利用できて便利です。

実行結果

$ ./Sample.hs
counter = 3

$ cat ./output.log
wado: access (2018-08-26 14:04:07.132813451 JST)
wado: access (2018-08-26 14:04:07.133330363 JST)
wado: access (2018-08-26 14:04:07.133389916 JST)

missing-fields 警告

上記のようにフィールドが全て初期化されていないコードはコンパイル時に missing-fields 警告が出ます。

この警告を無視すると実行時エラーになる可能性があります。無視せずにしっかり修正しましょう。

ちなみに、通常のレコード構文でもフィールドが部分的にしか初期化されていない場合は、同様の警告がでます。(@fumieval さん、ご指摘ありがとうございます)

まとめ

  • RecordWildCards 言語拡張は現実世界ではとても便利 (レコードのフィールドがかなり沢山あったりするので)
  • Reader とかと組み合わせるとオシャレ
  • GHC の missing-fields 警告は絶対に無視しない (実行時エラーが発生する可能性がある)

以上です。