
PR Stanley wrote:
Paul: What is the underlying rationale for the Maybe data type?
It is the equivalent of a database field that can be NULL.
Paul: shock, horror! the null value or the absence of any value denoted by null is not really in harmony with the relational model.
Ketil should have said: It is the equivalent of the extremely common way of misusing NULL. It doesn't bring in all the unpleasant baggage of three valued logic, but simple indicates an exceptional value. This use of NULL, very common in practical databases, frowned on by DB designers who understand about relational theory and normalisation, is prevalent precisely because common SQL dialects really make it a pain to invent your own datatypes, so it's hard to "add an exceptional value". Practical programming needs a particular exceptional value very often indeed, to model things like optional parameters. If common SQL dialects supported types like 'Maybe Int' natively, then NULL could be used much less. Jules PS Students of NULL and 3-valued logic will note that some of the problem therein can be studied in Haskell by comparing (==) and liftM2 (==) as functions on Maybe Bool, or (>) vs liftM2 (>) on Maybe Int.