Ways of expressing 'bottom' in Haskell without resorting to unsafe operations
okmij.org