この記事は Haskell (その4) Advent Calendar 2017 の19日目の記事です。 この記事は Oleg Kiselyov and Chung-chien Shan, Functional Pearl: Implicit Configurations -- or, Type Classes Reflect the Values of Types の劣化版なので、原論文をすでに読んだという人はブラウザーのタブを閉じてくださって結構です。 普通は型と言ったらコンパイル時に決まっているものです1が、実行時の値に依存した型を作りたい時があります。例えば、 mod n で計算するための型(数学で言う $\mathbf{Z}/n\mathbf{Z}$)を作ったとして、 n として実行時に指定された値を使いたいと言うのは自然な欲求と言えます。 Haskell には、それを実現するた