
Costello, Roger L. wrote:
In this book [1] the author defines the term "bottom":
In order that we can say that, without exception, every syntactically well-formed expression denotes a value, it is convenient to introduce a special symbol (upside down T), pronounced 'bottom', to stand for the undefined value of a particular type. In particular, the value of infinity is the undefined value (bottom) of type Integer, and 1/0 is the undefined value (bottom) of type Float. Hence we can assert that 1/0 = bottom.
He defines infinity as this:
infinity :: Integer infinity = infinity + 1
The author says this when discussing the Bool datatype:
It follows that there are not two but three Boolean values, namely False, True, and bottom. In fact, every datatype declaration introduces an extra anonymous value, the undefined value of the datatype.
What is the undefined value (bottom) of type Bool?
What is the undefined value (bottom) of type String?
If I create my own datatype:
data MyBool = F | T
What is the undefined value (bottom) of type MyBool?
I am not clear why "bottom" is an important concept. Would you explain please?
Bottom, _|_, is a little trick to do precisely what Bird said, namely "make every expression denote a value". As you know, in Haskell, you can reason about programs by comparing their values. For instance, we have 4+5 = 10-1 = length [0..8] = sum (replicate 3 3) because all these expressions denote the value 9, a number. But there are expressions that should be numbers, yet aren't. Examples: sum [1..] let loop = 2-loop in loop What value do they have? Certainly not 1 or 5 or some other number. We do want them to have a value, though, so we have to invent one: _|_ . More precisely, every expression that does not terminate denotes the value _|_. (Actually, we have to invent one for every type: _|_ :: String, _|_ :: Bool, _|_ :: MyBool, etc. because we can only compare values of the same type.) The rules for calculating with _|_ are presented here: http://en.wikibooks.org/wiki/Haskell/Denotational_semantics Best regards, Heinrich Apfelmus -- http://apfelmus.nfshost.com