Haskell はいくつかのリテラルで型クラスを使用したオーバーロードを許容している.例えば,Haskell で 1 と書いた場合,この型は 1 :: Num a => a になり, Num のインスタンスを定義することで,リテラルに対する実体をユーザも制御できるようになっている.GHC拡張で文字列に対してのオーバーロードなども提供されている.ただ,提供するデータ型とリテラルによっては,プログラムが意図通りに動かなかったりクラッシュしてしまったりすることがある.これを事前にチェックする仕組みを,コンパイラプラグインで実装する方法を紹介する. なお,環境として以下を想定している. Haskell のオーバーロードリテラルHaskell では整数及び浮動小数点数リテラルにおいて,オーバーロードが許容されている.それぞれ, 整数リテラル: Num のインスタンス 浮動小数点数リテラル: Frac

