module Base ( interpreter ) where import Isomorphism import MonadF import Package -- Figure 4: The base interpreter prepackage data TermZ = Bogon data ValueZ = Wrong interpreter :: (MonadF mt, MonadF mv) => Prepackage TermZ ValueZ (mt (FixF mt TermZ) TermZ) (mv (FixF mv ValueZ) ValueZ) ve (FixF mt TermZ) (FixF mv ValueZ) interpreter = Prepackage my_isom_t'' my_isom_v'' my_finalize where my_isom_t'' = wisom my_isom_v'' = wisom my_finalize realTop = Package { parser = parseZ , interpr = interpZ , complainr = complainZ , showvalr = showvalZ , namer = nameZ , makenumr = error "undefined makenumr" , makefunr = error "undefined makefunr" , applyr = error "undefined applyr" } where top = lowerTop my_isom_t'' my_isom_v'' realTop parseZ s = [(unit Bogon, s)] interpZ Bogon _ = complainr top "invalid expression" complainZ s = unit Wrong showvalZ Wrong = "" nameZ = "interpreter"