Unlifted Type
よくわからんが
http://hackage.haskell.org/trac/ghc/ticket/317
以下の話は、GHC6.4.2のghciでやった結果。GHCのバージョンが違ったり、コンパイルした場合や最適化した場合は挙動が変わるかも。ここ見ると、Int#とかのunlifted typeはbottomを含まない。従って
{-# OPTIONS -fglasgow-exts #-} import GHC.Exts loop :: Int# loop = loop
とかやってもエラー。
{-# OPTIONS -fglasgow-exts #-} import GHC.Exts bot :: () -> Int# bot () = bot () test :: Bool test = stops (bot ()) where stops :: Int# -> Bool stops _ = True main = print test
Trueが返ってくる。
{-# OPTIONS -fglasgow-exts #-} import GHC.Exts bot :: () -> Int# bot () = bot () stops :: Int# -> Bool stops _ = True test :: Bool = stops (bot ()) main = print test
だと⊥に落ちる。
Int#をIntにした場合は、当たり前だけどどっちでも、Trueが返ってくる。bot関数がwell-definedでないんだと思うけど、超どうでもいいな。こないだから私はなんで、GHCの粗探しをしてるんだ?