def number_end

qasim-bend-kit@0.1.0.2 · proof/JSON_RenderLexProof.bend:147

import qasim-bend-kit@0.1.0.2/proof/JSON_RenderLexProof.bend as JSONRenderLexProof
import Base
import qasim-bend-kit@0.1.0.2/libs/JSON.bend as J
import qasim-bend-kit@0.1.0.2/proof/JSON_NumberLexProof.bend as Num

147def number_end(+text: String,
148               +acc: List<&2, J.Lexeme>,
149               +evidence: {J.number_valid(text) == True{} : Bool}) -> {J.lex_scan(text, J.Outside{}, SNil{}, acc) == (List.reverse(&2, J.Lexeme, J.Payload{text} <> acc)) : List<&2, J.Lexeme>}:
150    match text:
151        case SNil{}:
152            Empty.absurd({J.lex_scan(SNil{}, J.Outside{}, SNil{}, acc) == (List.reverse(&2, J.Lexeme, J.Payload{SNil{}} <> acc)) : List<&2, J.Lexeme>},
153                Num.false_true(Equal.trans(Bool, False{}, J.number_valid(SNil{}), True{}, {==}, evidence)))
154        case SCon{+head, +tail}:
155            Equal.trans(List<&2, J.Lexeme>,
156                J.lex_scan(text, J.Outside{}, SNil{}, acc),
157                J.lexemes(text, J.Outside{}, SNil{}, acc, J.LexRaw{}),
158                List.reverse(&2, J.Lexeme, J.Payload{text} <> acc),
159                Equal.cong(J.LexAction, List<&2, J.Lexeme>, action => J.lexemes(text, J.Outside{}, SNil{}, acc, action),
160                    J.lex_seed_action(text, J.Outside{}), J.LexRaw{},
161                    Num.number_char_action(head, J.number_char(head), {==}, tail, J.NumberStart{}, evidence)),
162                Equal.trans(List<&2, J.Lexeme>,
163                    J.lexemes(text, J.Outside{}, SNil{}, acc, J.LexRaw{}),
164                    J.lex_scan(tail, J.Outside{}, SCon{head, SNil{}}, acc),
165                    List.reverse(&2, J.Lexeme, J.Payload{text} <> acc),
166                    {==},
167                    Equal.trans(List<&2, J.Lexeme>,
168                        J.lex_scan(tail, J.Outside{}, SCon{head, SNil{}}, acc),
169                        List.reverse(&2, J.Lexeme, J.Payload{SCon{head, SNil{}} ++ tail} <> acc),
170                        List.reverse(&2, J.Lexeme, J.Payload{text} <> acc),
171                        number_tail_acc(tail, J.number_next(J.NumberStart{}, head), head, SNil{}, head, SNil{}, acc, {==},
172                            Num.number_valid_cons(head, tail, J.NumberStart{}, evidence)),
173                        Equal.cong(String, List<&2, J.Lexeme>, s => List.reverse(&2, J.Lexeme, J.Payload{s} <> acc),
174                            SCon{head, SNil{}} ++ tail, text, {==}))))

Uses (22)

Used by (1)