public override IMatched <Unit> Prefix(ParseState state, Token[] tokens)
        {
            message = tokens[2].Text;
            state.Colorize(tokens, Color.Whitespace, Color.Keyword, Color.Keyword);

            parameterCount = 1;
            fieldName      = "__$0"; //!?*%$
            message        = message switch
            {
                "!" => "map",
                "?" => "if",
                ":" => "bind",
                _ => message
            };

            switch (message)
            {
            case "for":
            case "@":
                message = "each(_)";
                break;

            case "fold":
            case "$":
                message = "foldl";
                goto case "foldl";

            case "foldl":
                message       += "(_,_)";
                fieldName      = "__$1";
                parameterCount = 2;
                break;

            case "reducel":
                message       += "(_,_)";
                fieldName      = "__$1";
                parameterCount = 2;
                break;

            case "accr":
                message = "foldr";
                goto case "foldr";

            case "foldr":
            case "reducer":
                message       += "(_,_)";
                parameterCount = 2;
                break;

            case "while":
            case "takeWhile":
                message = "takeWhile(_)";
                break;

            case "until":
            case "takeUntil":
                message = "takeUntil(_)";
                break;

            case "skipWhile":
                message = "skipWhile(_)";
                break;

            case "skipUntil":
                message = "skipUntil(_)";
                break;

            case "zip":
            case "z":
            case "cross":
            case "x":
            case "*":
                parameterCount = 2;
                message        = message is "z" or "zip" or "*" ? "zip(_,_,_)" : "cross(_,_,_)";
                break;

            case "seq":
            case ".":
                message = "seq(_)";
                break;

            default:
                message += "(_)";
                break;
            }

            state.BeginImplicitExpressionState();
            state.ImplicitExpressionState.FieldName1 = fieldName;
            if (parameterCount == 2)
            {
                state.ImplicitExpressionState.FieldName2 = fieldName == "__$0" ? "__$1" : "__$0";
            }

            return(Unit.Matched());
        }