[Haskell-beginners] Re: A Comparison of Haskell and Scheme

Benjamin L.Russell DekuDekuplex at Yahoo.com
Tue Feb 10 05:03:31 EST 2009


On Tue, 10 Feb 2009 00:30:40 -0800, Albert Krewinkel
<krewinkel at gmx.net> wrote:

>Of what I've seen so far, I'm very fascinated by the power and elegance
>of Haskell.  I read a few short introductions on Monads, getting a
>glimps of easy DSL developing in Haskell.  In Lisp, one would use the
>macro system to achive this.  Even though the concepts seem
>fundamentally different, I was wondering if there are any parallels?

Lisp-style macros enable one to extend Lisp syntax.  They take Lisp
code as input, and return Lisp code as output.  This behavior is
closely related to reflection (see
http://en.wikipedia.org/wiki/Reflection_(computer_science)), in which
a computer program observes and modifies its own structure and
behavior.

In a related thread on Haskell-Cafe (see "[Haskell-cafe] Re: Monad
explanation" at
http://www.haskell.org/pipermail/haskell-cafe/2009-February/055052.html),
I recently asked about reflection in Haskell:

>On Wed, 4 Feb 2009 21:43:04 -0800, Max Rabkin <max.rabkin at gmail.com>
>wrote:
>
>>On Wed, Feb 4, 2009 at 9:38 PM, Benjamin L. Russell
>><DekuDekuplex at yahoo.com> wrote:
>>> Is it possible to write a self-referential function in Haskell that
>>> modifies itself?
>>
>>Is it possible to write *any* kind of function in Haskell that
>>modifies *anything*?
>
>While trying to research this issue, I came across a relevant archived
>thread in Haskell-Cafe, entitled "[Haskell-cafe] haskell and
>reflection," started by Greg Meredith, dated "Tue, 11 Sep 2007
>07:09:22 -0700" (see
>http://www.mail-archive.com/haskell-cafe@haskell.org/msg29882.html),
>which at first had me worried.  Specifically, Greg wrote as follows:
>
>>Am i wrong in my assessment that the vast majority of reflective machinery
>>is missing from Haskell? Specifically,
>>
>>   - there is no runtime representation of type available for
>>   programmatic representation
>>   - there is no runtime representation of the type-inferencing or
>>   checking machinery
>>   - there is no runtime representation of the evaluation machinery
>>   - there is no runtime representation of the lexical or parsing
>>   machinery

In fact, Haskell does offer a somewhat similar parallel to macros in
Lisp:  Template Haskell (see
http://www.haskell.org/haskellwiki/Template_Haskell).  To continue:

>>Op 11-sep-2007, om 18:43 heeft Greg Meredith het volgende geschreven:
>>
>>[...]
>>
>>Template Haskell [1] is a system that lets you write programs that get 
>>executed at *compile time*, and that produce parts of the Haskell program 
>>to be compiled by manipulating a representation of the program as structured 
>>data. It's a form of reflection restricted to compile time, if you'd ask me.
>>
>>[...]
>>
>>[1] http://www.haskell.org/haskellwiki/Template_Haskell
>
>According to the site referenced by the above-mentioned link,
>
>>Template Haskell is an extension to Haskell 98 that allows you to do type-safe 
>>compile-time meta-programming, with Haskell both as the manipulating language 
>>and the language being manipulated.

There is also a related thread on this issue:

Explanation of macros; Haskell macros
http://mail.python.org/pipermail/python-list/2003-October/228339.html

The above-referenced paper also references the following related paper
discussing this topic in more detail:

Template Meta-programming for Haskell
by Tim Sheard and Simon Peyton Jones
http://www.haskell.org/th/papers/meta-haskell.ps

>Also, could someone point me to a gentle introduction to syntax,
>semantics and type systems?  I understand that lisp-like macros do not
>exist in Haskell since they would break the type system and could give
>rise to unclear semantics.  I'd like to understand what's going on, so
>pointers to books or tutorials would be highly appreciated.

One book that is often mentioned in this context is the following:

Types and Programming Languages
by Benjamin C. Pierce
http://www.cis.upenn.edu/~bcpierce/tapl/

Hope this helps....

-- Benjamin L. Russell
-- 
Benjamin L. Russell  /   DekuDekuplex at Yahoo dot com
http://dekudekuplex.wordpress.com/
Translator/Interpreter / Mobile:  +011 81 80-3603-6725
"Furuike ya, kawazu tobikomu mizu no oto." 
-- Matsuo Basho^ 



More information about the Beginners mailing list