`undefined` is not a value in any domain. It isn't a value at all. It's certainly not part of my monad language or algebra. Up to the semantic level of comparing observable and legally defined behaviors, we can have the identity law. That's sufficient for the letter of the law, even if not ideal from Haskell's operational perspective.

Implicit use of laziness or undefined to model and reason about data or algebras is a mistake that mixes semantic layers. Even in Haskell. There's a reason every robust library for processing signals or streams will model them explicitly.

Regards,

Dave

On Sat, Jan 21, 2012 at 11:22 AM, Roman Cheplyaka <roma@ro-che.info> wrote:
* David Barbour <dmbarbour@gmail.com> [2012-01-21 11:09:43-0800]
> Logically only has meaning when `=` applies to values in the domain.
> `undefined` is not a value in the domain.
>
> We can define monads - which meet monad laws - even in strict languages.

In strict languages 'undefined' is not a value in the domain indeed, but
it is in non-strict languages, exactly because they are non-strict.

I think that's what Robert Harper meant by saying that Haskell doesn't
have a type of lists, while ML has one [1].

[1]: http://existentialtype.wordpress.com/2011/04/24/the-real-point-of-laziness/

--
Roman I. Cheplyaka :: http://ro-che.info/