>>969
どうも、Int の Num クラスのインスタンス定義の negate が原因っぽい

より正確に言えば、

instance Num Int where
 negate (I# x) = I# (negateInt# x)
 abs n = if n `geInt` 0 then n else negate n

の negateInt# 関数がおかしいみたい(それ以外に怪しいところが見当たらない)
ただ、残念ながら negateInt# の定義が追求できなかった

ちなみに、Int32 や Int16 なども negate の定義に negateInt# を使ってるから、
たとえば以下のようになる

> -2^31 :: Int32
> -2147483648
> negate (-2^31 :: Int32)
> -2147483648

これはバグなのか仕様なのか・・・

クソ、英語をちゃんと身につけておくべきだった
バグにしろ仕様にしろ、報告できるのに