
On Mon, Sep 24, 2007 at 06:47:05PM -0700, Dan Weston wrote:
Of course I should have proofread this one more time!
What is a point? A point in Hask* is a type with only a single value in it, from which all other values can be constructed. Every value x maps trivially into a function (const x), and when you apply this function to the (only) value of a point, you get x back. There is a built-in Haskell type () whose only value [besides undefined] is also called (), so we might as well take the type () as our point:
Actually, a point is any one object, for Hask* it is any one monotype (e.g. (), [Int], (Char,Double)). The magic of an *initial* object (i.e. a type with only one nullary constructor such as () that has only one (defined) value) is that there is a *unique* function mapping it to any other type. But that's being greedy, since we don't need a unique function, just any one function. A forgetful function like const doesn't care which type its second argument is.
() isn't an initial object. There are no initial objects in Hask-with-⊥, since every object admits at least four arrows to Bool (const True, const False, const undefined, and undefined). Stefan