はいはい、とんとご無沙汰しとります。ちゅーんさんです。 HaskellではStateモナド等を使って、状態を扱う事ができます。 また、モナドの合成にはモナド変換子がよく使われますが、 モナド変換子は階層構造になっているため、複数の状態系モナドを、 組み合わせて使うような、よくある場合に適さないという問題があります。 で、 この解決方法には、例えばOleg先生のextensible-effects 等、いろいろと考えだされています。 個人的にEffは超絶技巧のわりにはあまり分かりやすいイメージもなく、 既存のモナドをすべて置き換えなくてはいけないため、あまり好きではないのです。 そこで、単純に複数のレコードを一つに纏めあげたいだけの場合は、 lensライブラリの makeClassy というTHを使って型を作成するのをおすすめします。 導入 まず、以下のような2つの型を考えましょう。 dat