Refusal

Refusal :: # (opaque)
to_str : Refusal -> Str

The sentence a Refusal reads as, for showing a person.

Refusal : [
    UnexpectedCharacterAfterToken,
    RadixDigitExpected,
    FractionNeedsDigit,
    ExponentNeedsDigit,
    NumberNeedsIntegerDigit,
    IdentifierExpected,
    KeywordMustBeQuoted(Str),
    UnicodeEscapeNotAScalar,
    UnicodeEscapeTooLong,
    UnterminatedUnicodeEscape,
    UnknownEscape,
    UnterminatedString,
    IllegalCharacterInString,
    UnterminatedMultilineString,
    MultilineNeedsNewlineAfterOpener,
    RawStringExpectedAfterHash,
    RawMultilineNeedsNewlineAfterOpener,
    UnterminatedRawString,
    NewlineInSingleLineRawString,
    MultilineFinalLineNotBlank,
    MultilineIndentationMismatch,
    UnterminatedBlockComment,
    EsclineNeedsLineEnd,
    TrailingContent,
    UnclosedAnnotation,
    SlashdashNeedsChildrenBlock,
    SecondChildrenBlock,
    ChildrenBlockOrNodeEndExpected,
    UnclosedChildrenBlock,
]

Every way a source text is not KDL, named. Match the tag; to_str is for display and nothing branches on it.

Or : Try(a, [Refused(Refusal)])

An a, unless the source text is not KDL. This is the only spelling of the Refusal channel in the package: closed, so a scanner that could refuse some other way has to widen this line rather than its own signature.