implementation module gen import StdEnv import Data.Either import Data.Func import Text import ast gen :: Expression -> Either [String] [String] gen _ = Left ["genbork"] /* gen (AST fs) = Right ["#include \"rts.h\"\n" :genCode fs [] ] class genCode a :: a [String] -> [String] instance genCode String where genCode s c = [s:c] instance genCode Char where genCode s c = genCode (toString s) c instance genCode [a] | genCode a where genCode [] c = c genCode [a:as] c = genCode a (genCode as c) instance genCode Function where genCode (Function name args body) c = ["struct stackval_t *", toString name, "(":genCode (join ", " ["struct stackval_t *" +++ toString a\\a<-args]) [") { return ":genCode body ["; }\n":c]]] instance genCode Value where genCode (Int i) c = ["lit(",toString i,")":c] genCode (Bool i) c = ["lit(",if i "true" "false",")":c] genCode (Func _ _ _) c = abort "help" instance genCode Expression where genCode (Lit l) c = genCode l c genCode (Var ['if']) c = genCode (Var ['_if']) c genCode (Var v) c = ["var(",toString v,")":c] genCode (App a b) c = ["ap(":genCode a [", ":genCode b [")":c]]] genCode (Lambda a b) c = abort "help" genCode (Builtin b args) c = genCode b ["(":genCode args [")":c]] */