Constraints are almost done. (They’re easy to implement, but I’ve just been fixing existing tag functionality.) Then, I’ll focus on some other type tag quirks required to create functors (see below).
I have thought a lot about functors, applicatives, and monads. I’ve concluded that a Haskell-style implementation wouldn’t be very intuitive. I’m keeping the same terms and names (for now), but functors will use another new feature that I'll likely share soon.
I'm also trying to reduce clutter in the palette. I keep rereading Bringing "No Ceiling" to Scratch, and I'm always impressed by how many capabilities were added with so few blocks. TYOT's Type Construction category is as long as the original Type Creation category, but the Tag Management category is full of shortcuts for features I feel users might be confused about.
global type tag
, global block tag
: Not necessary. I could possibly condense 'em into one block.
tag constructor
, contents of
, subtags of
: The first was added because I kept getting annoyed with script variables lol. The last two could be condensed.
script tags
, add to
, remove from
, clear
: These are the essentials. I wish I could just reuse the equivalent list primitives, but I'm avoiding modifying primitives in case I have to reset the palette.
proprietary conditions
, distribution
: I had trouble with the wording. These are supposed to add requirements to tags; the first allows items in, and the second modifies items that made it in. I'll probably adjust the labels.
palette type tag
, add to palette
, clear palette
: I believe the first is fine, but the last two are just redundant. If I were to get rid of these, I'd add their functionality to the add to
and clear
blocks. It's a bit tricky, though, since I would have to add special cases for the palette.
tag construction script
: Not necessary, but it'll be useful in the future for porting to other versions.
reset TYOT tags
, stabilize block tag
: The first is nice to have since the native tags can easily get messed up. The second could be created by the user, but I thought it would be good to add. If I had to remove any other blocks, this would probably be my first choice. (If you're wondering what it does, it takes a block tag and evaluates all of its block conditions so that it no longer dynamically updates.)
Tell me what you think! If you have any other ideas or feedback, please share!