
On Tuesday 30 March 2010 4:34:10 pm Ashley Yakeley wrote:
Worse than that, if bottom is a value, then Hask is not a category! Note that while undefined is bottom, (id . undefined) and (undefined . id) are not.
Hask can be a category even if bottom is a value, with slight modification. That specific problem can be overcome by eliminating seq (and associated stuff; strict fields, bang patterns, ...), because it is the only thing in the language that can distinguish between the extensionally equal: undefined \_ -> undefined the latter being what you get from id . undefined and undefined . id. Bottom, or more specifically, lifted types, tend to ruin other nice categorical constructions, though. Lifted sums are not Hask coproducts, lifted products are not Hask products, the "empty" type is terminal, rather than initial, and () isn't terminal. But, if we ignore bottoms, these deficiencies disappear. See, of course, Fast and Loose Reasoning is Morally Correct. * -- Dan [*] http://www.comlab.ox.ac.uk/jeremy.gibbons/publications/fast+loose.pdf