Here's an interesting insight on how using a purely functional language (Haskell) to implement an imperative one (Perl6) helped:<p>> <i>It was helpful in that it's much easier to reason about Perl 6 semantics, making explicit all ambiguities in the specification, because Haskell did not prefer one semantic over another.</i><p>It's a salient point because an interpreter built in an imperative language naturally reuses most of the host language's semantics, often without anyone noticing. This can be extremely powerful (SICP's "metacircular evaluator" is incredibly elegant), but also limiting. (Implementing anything sufficiently <i>unlike</i> Scheme using SICP's approach was far more awkward.)