stack.yaml はどこで読むのか
Runner.hs#withBuildConfigAndLock なんてのがあって、ここで読んでいる。実際に読んでいるのは Config.hs#loadProjectConfigとかで、こいつが FromJSONのインスタンス になっていてパースしてる。設定の優先順位とかは この辺 で決まってる。設定は Monoid として定義されていて、ほとんどはFirstだが物によっては挙動が違うので注意。
Resolver のロード
build を呼ぶお膳立てをしてくれる withBuildConfigAndLock から潜っていくと BuildConfigを読むための関数を作っている。ここで利用する loadBuildConfig が BuildPlan#loadResolver の先で ダウンロードなどをしている。
用意された lcLoadBuildConfig は buildが呼ばれる前に使われる 。この段階で MiniBuildPlanが決定されて コンパイラのバージョンが決まっている。