[Haskell-cafe] Trapped by the Monads

Mark Carter mcturra2000 at yahoo.co.uk
Tue Sep 20 16:03:26 EDT 2005

Bill Wood wrote:

> Could you briefly elaborate on what you mean by "hybrid variables"?
According to Google, hybrid in genetics means "The offspring of 
genetically dissimilar parents or stock, especially the offspring 
produced by breeding plants or animals of different varieties, species, 
or races." It's kind of like that - but for variables.

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. The suggested solution is to give each 
variable one meaning. So, I could define, say, a variable called 
success, and do something like
mem =improved_ malloc(1024, & success)

Admittedly, there's nothing to force the programmer to actually check 
the success variable; but at least the idea is that everything is much 
more explicit, and the programmer is less likely to shoot himself in the 

Yahoo! Messenger - NEW crystal clear PC to PC calling worldwide with voicemail http://uk.messenger.yahoo.com

More information about the Haskell-Cafe mailing list