Just for your fun and horror

Manuel M. T. Chakravarty chak@cse.unsw.edu.au
Tue, 20 Feb 2001 00:26:08 +1100


Jon Cast <jcast@ou.edu> wrote,

> Manuel M. T. Chakravarty writes:
> > So, I guess, I have to extend my example to
> >
> >   bar x = x + 42
> >
> 
> I don't know if this counts, but gcc allows:
> 
> int bar(int x)__attribute__(const)
> {
> 	return(x + 42);
> }
> 
> which is the exact C analogue of the Haskell syntax.  

Sorry, but I would say that it doesn't count as it is a
compiler specific extension :-)  Nevertheless, a good
point. 

> The majority of `C
> functions', I believe, (and especially in well-written code) are intended to
> be true functions, not IO monads.  They modify the state for
> efficiency/ignorance reasons, not because of a conscious decision.

Yes and no.  I agree that they are often intended to be true
functions.  However, it is not only efficiency and ignorance
which forces side effects on the C programmer.  Restrictions
of the language like the lack of call-by-reference arguments
and (true) multi-valued returns force the use of pointers
upon the programmer.

Anyway, I don't want to do C bashing here - although, on
this list, I might get away with it ;-)

Cheers,
Manuel