Re: Writing an extensible interpreter

Message: 2 From: "David House"
Subject: [Haskell-cafe] Writing an extensible interpreter
I'm in the process of writing an interpreter for the self-modifying automaton languages SMATINY [1], designed by ihope (whose name some of you may recognise from IRC). The current effort is online [2], but it's at a rather early stage and there's a few modifications I'd like to make to it.
[snip] However, the remaining issue is step 1): how would the metacode handle
additional constructors to the Step ADT? Type classes won't work here: the intepreter has a type of [Step] -> String. With type classes this would have a type of something like Step a => [a] -> String, but by the homogeneity of lists you'd only be able to have one type of step in your program.
You can get around the homogeneity of lists problem with existential types:
http://www.haskell.org/hawiki/ExistentialTypes http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/evaluator2.htm... Another solution might be to eliminate the algebraic data type entirely and have the Parsec actions return a Smatiny action. Instead of dispatching on the constructor of Step, package up any information you need as a closure and make Step a type synonym for 'Smatiny ()' or 'Smatiny a' or whatever type you need. Then the interpreter main loop just executes the action returned by the parser. - Jonathan
participants (1)
-
Jonathan Tang