「型システム入門」(TAPL 日本語版)の発売を記念して、型にまつわる何かを書こうと思い、とりあえず型レベルプログラミングでの Quine に挑戦して見ました。 TAPL の内容には全く関係ありません。型クラスは発展的なものなので、入門書である TAPL には名前しか出てきません *1 。型クラスまで書かなくても 500 ページ超の本になるので、型の世界は奥が深いですね。 デモ ソースはこちら。 ref: https://github.com/mame/type-level-quine/blob/master/type-level-quine-poc.hs 最後の 2 行に注目。 main = putStr $ show quine quine = undefined :: Q X0 b (...) => b わけわからん型注釈がついてますが、要は quine = undefined なこ