tricu

An interpreted language for exploring Tree Calculus
Log | Files | Refs | README | LICENSE

pattern-slots.tri (712B)


      1 !import prelude *
      2 !export *
      3 -- Compiler-side capture order for validated authored patterns.
      4 -- Prepend captures in traversal order, so the returned list is reversed.
      5 -- Literal trees are opaque; this is not a matcher or reference evaluator.
      6 
      7 patternSlots_ self pattern slots = matchPair (tag payload :
      8   lazyBool (_ : self payload slots)
      9     (_ : lazyBool (_ : matchPair (left right : self right (self left slots)) payload)
     10       (_ : lazyBool (_ : pair payload slots)
     11         (_ : lazyBool (_ : matchPair (slot child : self child (pair slot slots)) payload)
     12           (_ : slots) (equal? tag 6)) (equal? tag 4)) (equal? tag 3)) (equal? tag 2)) pattern
     13 patternSlots pattern slots = y patternSlots_ pattern slots