まずatomicに分節する
考えている対象や操作に対する最もatomicな単位に分解する
例えば、recordを定義したらそれに含まれる全peropertyに対するgetterを用意するイメージ
これ以上分解できないという極論のatomicを常に考えるように意識する
ただし、それを全部atomicに実装するのは色々面倒なので、実際は妥協する
やりすぎると早すぎる抽象化っぽくなるかもしれないし、
単純に、記述量がめちゃくちゃ増えるかもしれない
ただし、そこは妥協しているという気持ちを持って妥協する
スケジュールを立てる前に、タスクの洗い出しをするのに似ている
次に、atomicに分けたものをグルーピングする
何らかの方針に沿ってグルーピングし、構造を作る
このときに、縦に切るか、横に切るかのような話が(逆向きに)生じる
そこに抽象化の筋のようなものが現れる
グルーピングについても、atomicにやるなら、全ての組み合わせを想定すべきということになる
全て列挙する
たぶん。
これは真にMECEに木構造に分解すれば最終的に必ず葉が一致する、と前提している
でもほんまか?という気持ちもする
この反例を具体的に出せるとスッキリしそう
これが本当なら、EitherとかIOとかをatomicに分解していけば、最終的な要素としてpureやjoinが出てくるのかもしれない
抽象化と逆の作業をいったんすることになる
一時的にちょっと考えることが増える
そもそも適切に分節することは難しい問題もある