There's a big difference.
You can see you are doing something fishy, and the compiler
can too, and it can warn you.

        -- Lennart

Michael Walter wrote:
Compare:

  int *p=...;
  int x=*p;

and:

  let
    p = ...
    Just x = p

So actually, there is few difference between dereferencing a pointer
without checking for 0, and extracting the Maybe value without
handling Nothing, apart from that it leads to undefined behavior in C
which in fact isn't really a point against "hybrid variables".

On 9/20/05, Lennart Augustsson <[EMAIL PROTECTED]> wrote:

Mark Carter wrote:

The typical example in C is:
mem = malloc(1024)
Malloc returns 0 to indicate that memory cannot be allocated, or a
memory address if it can. The variable mem is a so-called hybrid
variable; it crunches together 2 different concepts: a boolean value
(could I allocate memory?) and an address value (what is the address
where I can find my allocated memory).

It's considered a bad idea because it makes it easy for programmers to
use the value inappropriately - witness the number of programmers who
pass in 0 as a memory location.

This is a bad idea in C, because you cannot force programmers to test
the return value properly.

The Maybe type in Haskell is a good idea, because you must test the
a Maybe value to extract the real value.  (Using the Maybe monad this
can be hidden.)

       -- Lennart

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe




_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to