The TYPESET! Representation Problem

Things are indeed now built on top of typechecker functions. And those functions indeed don't show you that much:

>> any-series?/
== ~#[frame! "any-series?" [value]]~  ; anti

But on the bright side, functions cache their symbols. So you're not completely in the dark about what a typeset represents.

Also: function dispatchers have reflectors now. So you can ask them questions. There's no reason the built-in typecheckers couldn't cook up an answer to TYPES OF...

>> types of any-series?/
== [text! block! ...<whatever>]

So look on the bright side, things aren't that bad.... :sun:

Also... PARAMETER!

Another concept that may come into play here is PARAMETER!.

There's no MAKE for them yet. But we can get one out of the frame of a prebuilt function:

>> negate/
== ~#[frame!! [
    number: #[parameter! [any-number? pair! money! time!]]
]]~  ; anti

>> negate.number
== #[parameter! [any-number? pair! money! time!]]

We can use it with match:

>> match frame.number 10
== 10

>> match frame.number <abcd>
== ~null~  ; anti

So that's something like a TYPESET!. It's not a set of bits, but an array of constraints augmented by some optimizations that speed up matching. I'm not sure how much of a role PARAMETER! will play, but it may fulfill some purposes people had in mind for typesets.