Each Elsa object should have two printing methods:
one to serialize the object, in a way that this can be read back to reconstruct the object => object-write. Slots can have overriding printers via :printer property
one to print the object in a human readable way (for debugger etc). We will always use the #<class some-readable-representation> format. => cl-print-object. For a class hierarchy when reasonable we can use top-level class, since this does not need to be readable back into lisp.
some classes might have specialised methods, for example elsa-type needs serialization in a elsa-make-type compatible form (rather than a string?), and elsa-form should be able to turn into a lisp form.
use eieio-override-prin1 as printer for object types so there is no useless indent
[ ] rename elsa-tostring to elsa-to-string
[ ] elsa-type
[ ] elsa-type-describe -> maybe return a form instead, which could then be turned into a string. So this would return lisp forms string (symbol) or (list string) which could be (format "%s" x).
[ ] cl-print-object => #<elsa-type string> or #<elsa-type (list string)> => single implementation for type using the "description" to print the actual type.
[ ] object-write => (elsa-type-string) or (elsa-type-list :item-type (elsa-type-string))
[ ] elsa-form
[ ] elsa-form-print -> we already have elsa-form-to-lisp which can then be turned into string
[ ] cl-print-object => #<elsa-form :foo> or #<elsa-form (list :list 1) => single implementation for all the forms with just a prefix #<elsa-form.
Each Elsa object should have two printing methods:
one to serialize the object, in a way that this can be read back to reconstruct the object =>
object-write
. Slots can have overriding printers via:printer
propertyone to print the object in a human readable way (for debugger etc). We will always use the
#<class some-readable-representation>
format. =>cl-print-object
. For a class hierarchy when reasonable we can use top-level class, since this does not need to be readable back into lisp.some classes might have specialised methods, for example
elsa-type
needs serialization in aelsa-make-type
compatible form (rather than a string?), andelsa-form
should be able to turn into a lisp form.use
eieio-override-prin1
as printer for object types so there is no useless indent[ ] rename
elsa-tostring
toelsa-to-string
[ ]
elsa-type
elsa-type-describe
-> maybe return a form instead, which could then be turned into a string. So this would return lisp formsstring
(symbol) or(list string)
which could be(format "%s" x)
.cl-print-object
=>#<elsa-type string>
or#<elsa-type (list string)>
=> single implementation for type using the "description" to print the actual type.object-write
=>(elsa-type-string)
or(elsa-type-list :item-type (elsa-type-string))
[ ]
elsa-form
elsa-form-print
-> we already haveelsa-form-to-lisp
which can then be turned into stringcl-print-object
=>#<elsa-form :foo>
or#<elsa-form (list :list 1)
=> single implementation for all the forms with just a prefix#<elsa-form
.