Hello,

Today I uploaded an experimental package that I made called Extenor[1].

Extenor is a shortened name for “Extensible Nominal Record”.  The key
goal behind it was to have something like Racket's structs that can
have struct-type-properties, but also be extensible and keep
extensions when functionally updated (unlike Racket's structs).
Secondarily, but similarly, I wanted a low-hassle flexible
dictionary-like object for use in Rash pipelines that has
struct-type-properties that let it hook into various generic
interfaces.  Eg. imagine an `ls-in-racket` that returns a dictionary
with a bunch of information about each file that can be easily
filtered, augmented, etc, but that also implements a hypothetical
`prop:path` that allows it to be used with `open-file` and other
functions that accept paths.

I've talked to a few people about the functional update of extended
structs problem before, so I thought I would reach out and ask for
comments on this design.  It's somewhat shoe-horning two problems into
one solution, but I find that I like it so far, at least for the uses
I imagine.  A more strictly struct-like version of this with
extenor-ref/extenor-set removed might be better for general-purpose
uses.  I haven't really read the literature on mixins and multiple
inheritance, so I can imagine this design could be falling for some
classic design blunders, and I'm open to any suggestions on good
papers or other resources to read about that.


[1] https://pkgd.racket-lang.org/pkgn/package/extenor

(At the time of writing, the package system reports on a version that
has a bug in Racket BC because I originally only tested it on Racket
CS, and the hosted documentation doesn't have examples in the Guide
section while the git master branch does.  So... if you want to play
around with it or read the docs you might want the git version until
the package server runs again...)

Thanks,
William Hatch

--
You received this message because you are subscribed to the Google Groups "Racket 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/20201220041729.GA19473%40conspirator.

Reply via email to