[Haskell-cafe] Monad of no `return` Proposal

Richard A. O'Keefe ok at cs.otago.ac.nz
Fri Oct 9 03:10:24 UTC 2015

On 6/10/2015, at 11:59 am, Doug McIlroy <doug at cs.dartmouth.edu> wrote:
> Another trick is to use plain if rather than #if or #ifdef,
> and let the compiler optimize away the unwanted side of the
> branch.

The University of Edinburgh had their own systems implementation
language, IMP.  Fortran -> Algol 60 -> Atlas Autocode -> IMP.
It was no surprise to find that
    %if <constant condition> %then <true part> %else <false part>
eliminated whichever branch would not be executed.
But it was astonishing to discover that
    %if <constant condition> %then %start
        <declarations T>
    %finish %else %start
        <declarations F>
would only process the declarations in the chosen part.
If you want to eliminate the preprocessor, you have got
to handle conditional declarations.

Even IMP did not handle

    %record %format table (
        %if keeping statistics %then %start
            %integer accesses, hits, misses,

which is something that a preprocessor can handle.

More information about the Haskell-Cafe mailing list