alias

Tryst::TclArgValue

Every value #command/#raw_command/#create_widget accept as a positional arg or kwarg value. An explicit union (rather than leaving *args/**kwargs untyped/generic) is deliberate: Crystal compiles a separate monomorphization of these methods per distinct argument-type combination actually passed at each call site, and forwarding a narrowed Proc value via &value (as #tcl_arg_value and #raw_command_argv both need to, to hand it to #register_callback) doesn't compile for a monomorphization whose kwargs happen to contain no Proc at all - even though that branch is provably dead code there, Crystal still type-checks it against whatever value's type is for that specific instantiation (confirmed directly: "expected a function type, not NoReturn"). Declaring this union up front instead means every call site shares the exact same concrete parameter types, so there's only ever one instantiation to type-check. Array is self-referential (Array(TclArgValue), not Array(String)) so nested arrays type-check too, matching ruby-tryst's #tcl_arg_value recursion. Widget is included so a widget can be passed directly as a #command arg/kwarg value (e.g. app.command(:pack, btn, pady: 10)) the same way ruby-tryst's #tcl_arg_value falls through to any object's #to_s.