Three Haskell Cake
ReaderTパターンや、mtlなどのデザパタを取り入れている
理解不足で理解を保留した箇所もいくつかあるのでまた再読しよう

Layer1
orchestration layer
Effectをinjdectionする層
この層はtestするのが難しいので薄く作る
Env
と AppM
型を定義する
命令形プログラミング的
Layer2
外部アービスと依存関係をモックアウトする
DDDのRepository層のようなイメージかな

できるだけ小さく保つ
OOP的
Layer3
純粋なビジネスロジックを書く
IOやEffectのような純粋でないものは何も含まない
関数型プログラミング的
AppMを、Layer2で定義される型クラスの、instanceにする部分はどこに含まれる?
Layer1かLayer2
それほど拘りがあるわけではないが、気持ち決めておきたい
たぶんLayer1
このアーキテクチャで実装された例
関連
参考
本家
purescript-halogen-realworldの解説記事
Haskell Cakeを元にわかりやすく5つのLayerに分けている
「5つのLayerに分けている」と聞くとちょっとギョッとするけどHaskell Cakeとほぼ同じ話
具体例があるので、どこに何を書けばよいのかわかりやすくなっていると思う