>>198 少なくともGHCやJHCならdoubleが定義されたモジュールをコンパイルする時点でコードを生成する。 そうじゃないと、doubleを使う度に毎回doubleをコンパイルすることになって、 分割コンパイルの恩恵が薄れる。(C++はあえてこれをやってるわけだが) それから、Haskellの仕様上、完全に静的に済ますわけにはいけない。 newtype P a = P a deriving Show nq :: (Show a) => Int -> a -> String nq 0 x = show x nq n x = nq (n-1) (P x) こういう関数をtemplate式でコンパイルしようとしたら、無限にnqのインスタンスを生成する必要がある。