Sat Jul 16 14:35:41 CEST 2011

Metalanguages are functional

What I thought to be the big insight in Staapl is that the
metalanguage (macro language) of an imperative Forth language can be
made purely functional.

What I did not understand at that time is that this is also part of
the idea of using monads in Haskell[1]:

    While programs may describe impure effects and actions outside
    Haskell, they can still be combined and processed ("compiled")
    purely, inside Haskell, creating a pure Haskell value - a
    [computation description] that describes an impure calculation.

What is similar between Monads and Staapl's associativity which allows
compile time and run time to be arbitrarily separated, is that in both
cases the awareness that we're dealing with a meta-level "disappears a

Of course, Staapl's macro language is dynamically typed so there are
no static type signatures to go by.  Maybe it would be a nice exercise
to make all that hidden structure more explicit.

[1] http://www.haskell.org/haskellwiki/Monad