[Haskell-cafe] Re: Laws and partial values
Dan Doel
dan.doel at gmail.com
Sat Jan 24 15:31:10 EST 2009
On Saturday 24 January 2009 3:12:30 pm Thomas Davie wrote:
> On 24 Jan 2009, at 20:28, Jake McArthur wrote:
> > Thomas Davie wrote:
> >> But, as there is only one value in the Unit type, all values we
> >> have no information about must surely be that value
> >
> > The flaw in your logic is your assumption that the Unit type has
> > only one value. Consider
> >
> > bottom :: ()
> > bottom = undefined
> >
> > Oviously, bottom is not ()
>
> Why is this obvious – I would argue that it's "obvious" that bottom
> *is* () – the data type definition says there's only one value in the
> type. Any value that I haven't defined yet must be in the set, and
> it's a single element set, so it *must* be ().
For integers, is _|_ equal to 0? 1? 2? ...
> > , but its type, nonetheless, is Unit. Unit actually has both () and
> > _|_. More generally, _|_ inhabits every Haskell type, even types
> > with no constructors (which itself requires a GHC extension, of
> > course):
>
> Does it? Do you have a document that defines Haskell types that way?
From the report: "Since Haskell is a non-strict language, all Haskell types
include _|_."
http://www.haskell.org/onlinereport/exps.html#basic-errors
Although some languages probably have the semantics you're thinking of (Agda,
for instance, although you can write non-terminating computations and it will
merely flag it in red, currently), Haskell does not.
-- Dan
More information about the Haskell-Cafe
mailing list