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
signature.asc
Description: Digital signature
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe