# Bottom

### From HaskellWiki

JaredUpdike (Talk | contribs) (Added remark that _|_ is a member of any type) |
JaredUpdike (Talk | contribs) (mentioned Prelude.undefined) |
||

Line 21: | Line 21: | ||

<haskell> |
<haskell> |
||

bottom = error "Non-terminating computation!" |
bottom = error "Non-terminating computation!" |
||

+ | </haskell> |
||

+ | |||

+ | Indeed, the Prelude exports a function |
||

+ | |||

+ | <haskell> |
||

+ | undefined = error "Prelude; undefined" |
||

</haskell> |
</haskell> |
||

## Revision as of 22:08, 4 January 2008

The term **bottom** refers to a computation which never completes successfully. That includes a computation that fails due to some kind of error, and a computation that just goes into an infinite loop (without returning any data).

The mathematical symbol for bottom is '⊥'. That's Unicode character 22A5 hex = 8869 decimal. Also available in HTML as '⊥' and in LaTeX as '\bot' (within math mode). In plain ASCII, it's often written as the extremely ugly character sequence '`_|_`

'.

Bottom is a member of any type, even the trivial type () or the equivalent simple type:

data Unary = Unary

If it were not, the compiler could solve the halting problem and statically determine whether any computation terminated.

Bottom can be expressed in Haskell thus:

`bottom = bottom`

or

bottom = error "Non-terminating computation!"

Indeed, the Prelude exports a function

undefined = error "Prelude; undefined"