(mac tem (name . fields) `(set (templates ',name) (list ,@(map (fn ((k v)) `(cons ',k (fn () ,v))) (hug fields))))) (mac make (name . args) `(inst ',name (list ,@(map (fn ((k v)) `(cons ',k ,v)) (hug args))))) (def inst (name kvs) (aif templates.name (table (map (fn ((k . f)) (cons k (aif (get k kvs) (cdr it) (f)))) it)) (err 'no-template))) (def readas (name (o s ins)) (withs (eof (join) v (read s 10 eof)) (if (id v eof) nil (isa!tab v) (inst name (cddr v)) (err 'inst-nontable))))