main = do n <- readLn print $ div10 n div10 :: Int -> Int div10 n | n == 0 = 0 | otherwise = result where result = 10 `div` n div10は10を引数の数字で割るような実装となっており、0で割られる時に0を返す実装になってます。 そして今回の問題なのですが、div10関数に0が渡った時に、Strict拡張なしでは0を返すのに対し、Strict拡張をつけてコンパイルしていた場合はdivide by zeroの例外が発生します(は?)。 Core言語でダンプして中身を読んでみた ソース上では何も変化がないので、仕方なくCore言語のソースを比較することにしました。とりあえず通常のStrict言語拡張なしのソースをダンプしてみます。 33 main :: IO () 34