Rename NamedSimplePattern_ -> Binding

This commit is contained in:
Tony Garnock-Jones 2021-06-25 10:25:26 +02:00
parent fdb43f6292
commit 60d1be41a3
13 changed files with 73 additions and 77 deletions

View File

@ -108,16 +108,16 @@ export type AtomKind = (
export type NamedAlternative = {"variantLabel": string, "pattern": Pattern};
export type NamedSimplePattern = (
{"_variant": "named", "value": NamedSimplePattern_} |
{"_variant": "named", "value": Binding} |
{"_variant": "anonymous", "value": SimplePattern}
);
export type NamedPattern = (
{"_variant": "named", "value": NamedSimplePattern_} |
{"_variant": "named", "value": Binding} |
{"_variant": "anonymous", "value": Pattern}
);
export type NamedSimplePattern_ = {"name": symbol, "pattern": SimplePattern};
export type Binding = {"name": symbol, "pattern": SimplePattern};
export type Ref = {"module": ModulePath, "name": symbol};
@ -209,16 +209,16 @@ export namespace AtomKind {
export function NamedAlternative({variantLabel, pattern}: {variantLabel: string, pattern: Pattern}): NamedAlternative {return {"variantLabel": variantLabel, "pattern": pattern};}
export namespace NamedSimplePattern {
export function named(value: NamedSimplePattern_): NamedSimplePattern {return {"_variant": "named", "value": value};};
export function named(value: Binding): NamedSimplePattern {return {"_variant": "named", "value": value};};
export function anonymous(value: SimplePattern): NamedSimplePattern {return {"_variant": "anonymous", "value": value};};
}
export namespace NamedPattern {
export function named(value: NamedSimplePattern_): NamedPattern {return {"_variant": "named", "value": value};};
export function named(value: Binding): NamedPattern {return {"_variant": "named", "value": value};};
export function anonymous(value: Pattern): NamedPattern {return {"_variant": "anonymous", "value": value};};
}
export function NamedSimplePattern_({name, pattern}: {name: symbol, pattern: SimplePattern}): NamedSimplePattern_ {return {"name": name, "pattern": pattern};}
export function Binding({name, pattern}: {name: symbol, pattern: SimplePattern}): Binding {return {"name": name, "pattern": pattern};}
export function Ref({module, name}: {module: ModulePath, name: symbol}): Ref {return {"module": module, "name": name};}
@ -858,9 +858,9 @@ export function asNamedSimplePattern(v: _val): NamedSimplePattern {
}
export function toNamedSimplePattern(v: _val): undefined | NamedSimplePattern {
let _tmp0: (NamedSimplePattern_) | undefined;
let _tmp0: (Binding) | undefined;
let result: undefined | NamedSimplePattern;
_tmp0 = toNamedSimplePattern_(v);
_tmp0 = toBinding(v);
if (_tmp0 !== void 0) {result = {"_variant": "named", "value": _tmp0};};
if (result === void 0) {
let _tmp1: (SimplePattern) | undefined;
@ -872,7 +872,7 @@ export function toNamedSimplePattern(v: _val): undefined | NamedSimplePattern {
export function fromNamedSimplePattern(_v: NamedSimplePattern): _val {
switch (_v._variant) {
case "named": {return fromNamedSimplePattern_(_v.value);};
case "named": {return fromBinding(_v.value);};
case "anonymous": {return fromSimplePattern(_v.value);};
};
}
@ -884,9 +884,9 @@ export function asNamedPattern(v: _val): NamedPattern {
}
export function toNamedPattern(v: _val): undefined | NamedPattern {
let _tmp0: (NamedSimplePattern_) | undefined;
let _tmp0: (Binding) | undefined;
let result: undefined | NamedPattern;
_tmp0 = toNamedSimplePattern_(v);
_tmp0 = toBinding(v);
if (_tmp0 !== void 0) {result = {"_variant": "named", "value": _tmp0};};
if (result === void 0) {
let _tmp1: (Pattern) | undefined;
@ -898,19 +898,19 @@ export function toNamedPattern(v: _val): undefined | NamedPattern {
export function fromNamedPattern(_v: NamedPattern): _val {
switch (_v._variant) {
case "named": {return fromNamedSimplePattern_(_v.value);};
case "named": {return fromBinding(_v.value);};
case "anonymous": {return fromPattern(_v.value);};
};
}
export function asNamedSimplePattern_(v: _val): NamedSimplePattern_ {
let result = toNamedSimplePattern_(v);
if (result === void 0) throw new TypeError(`Invalid NamedSimplePattern_: ${_.stringify(v)}`);
export function asBinding(v: _val): Binding {
let result = toBinding(v);
if (result === void 0) throw new TypeError(`Invalid Binding: ${_.stringify(v)}`);
return result;
}
export function toNamedSimplePattern_(v: _val): undefined | NamedSimplePattern_ {
let result: undefined | NamedSimplePattern_;
export function toBinding(v: _val): undefined | Binding {
let result: undefined | Binding;
if (_.Record.isRecord<_val, _.Tuple<_val>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $named) ? null : void 0;
@ -927,7 +927,7 @@ export function toNamedSimplePattern_(v: _val): undefined | NamedSimplePattern_
return result;
}
export function fromNamedSimplePattern_(_v: NamedSimplePattern_): _val {return _.Record($named, [_v["name"], fromSimplePattern(_v["pattern"])]);}
export function fromBinding(_v: Binding): _val {return _.Record($named, [_v["name"], fromSimplePattern(_v["pattern"])]);}
export function asRef(v: _val): Ref {
let result = toRef(v);

View File

@ -171,7 +171,7 @@ function parseDefinition(name: symbol, pos: Position | null, body: Array<Input>)
const p = parsePattern(name, input);
if (n !== false) {
if (p._variant !== 'SimplePattern') namedMustBeSimple(position(input[0]));
return M.NamedPattern.named(M.NamedSimplePattern_({ name: n, pattern: p.value }));
return M.NamedPattern.named(M.Binding({ name: n, pattern: p.value }));
}
return M.NamedPattern.anonymous(p);
}
@ -330,7 +330,7 @@ function parsePattern(name: symbol, body0: Array<Input>): Pattern {
});
function _maybeNamed<R,P>(
named: (p: M.NamedSimplePattern_) => R,
named: (p: M.Binding) => R,
anonymous: (p: P) => R,
recur: (b: Input) => P,
literalName?: Input): (b: Input) => R
@ -348,7 +348,7 @@ function parsePattern(name: symbol, body0: Array<Input>): Pattern {
if (name === false) {
return anonymous(recur(b));
}
return named(M.NamedSimplePattern_({ name, pattern: parseSimple(b, p => p, () =>
return named(M.Binding({ name, pattern: parseSimple(b, p => p, () =>
namedMustBeSimple(position(b))) }));
};
}

View File

@ -54,7 +54,7 @@
(define (check-named-pattern context scope p)
(match (unwrap p)
[(NamedSimplePattern_ n p)
[(Binding n p)
(check-binding context scope n)
(check-pattern (cons n context) scope p #t)]
[p (check-pattern context scope p #f)]))

View File

@ -59,7 +59,7 @@
[(Definition-Pattern p) (walk p)]
[(Definition-or p0 p1 pN) (for-each walk (list* p0 p1 pN))]
[(Definition-and p0 p1 pN) (for-each walk (list* p0 p1 pN))]
[(NamedSimplePattern_ n p) (walk p)]
[(Binding n p) (walk p)]
[(NamedAlternative _ p) (walk p)]
[(SimplePattern-seqof p) (walk p)]
[(SimplePattern-setof p) (walk p)]

View File

@ -96,6 +96,30 @@
(_ eof)))
(define parse-AtomKind!
(parse-success-or-error 'parse-AtomKind parse-AtomKind))
(struct
Binding
(name pattern)
#:transparent
#:methods
gen:preservable
((define/generic *->preserve ->preserve)
(define (->preserve preservable)
(match
preservable
((Binding ?name ?pattern)
(record 'named (list (*->preserve ?name) (*->preserve ?pattern))))))))
(define (parse-Binding input)
(match
input
((and dest
(record
'named
(list
(and ?name (? symbol?))
(app parse-SimplePattern (and ?pattern (not (== eof)))))))
(Binding ?name ?pattern))
(_ eof)))
(define parse-Binding! (parse-success-or-error 'parse-Binding parse-Binding))
(struct
Bundle
(modules)
@ -467,8 +491,7 @@
(define (parse-NamedPattern input)
(match
input
((app parse-NamedSimplePattern_ (and dest (not (== eof))))
(NamedPattern-named dest))
((app parse-Binding (and dest (not (== eof)))) (NamedPattern-named dest))
((app parse-Pattern (and dest (not (== eof))))
(NamedPattern-anonymous dest))
(_ eof)))
@ -499,7 +522,7 @@
(define (parse-NamedSimplePattern input)
(match
input
((app parse-NamedSimplePattern_ (and dest (not (== eof))))
((app parse-Binding (and dest (not (== eof))))
(NamedSimplePattern-named dest))
((app parse-SimplePattern (and dest (not (== eof))))
(NamedSimplePattern-anonymous dest))
@ -508,33 +531,6 @@
(parse-success-or-error
'parse-NamedSimplePattern
parse-NamedSimplePattern))
(struct
NamedSimplePattern_
(name pattern)
#:transparent
#:methods
gen:preservable
((define/generic *->preserve ->preserve)
(define (->preserve preservable)
(match
preservable
((NamedSimplePattern_ ?name ?pattern)
(record 'named (list (*->preserve ?name) (*->preserve ?pattern))))))))
(define (parse-NamedSimplePattern_ input)
(match
input
((and dest
(record
'named
(list
(and ?name (? symbol?))
(app parse-SimplePattern (and ?pattern (not (== eof)))))))
(NamedSimplePattern_ ?name ?pattern))
(_ eof)))
(define parse-NamedSimplePattern_!
(parse-success-or-error
'parse-NamedSimplePattern_
parse-NamedSimplePattern_))
(define (Pattern? p)
(or (Pattern-SimplePattern? p) (Pattern-CompoundPattern? p)))
(struct

View File

@ -20,7 +20,7 @@
(define (pattern->match-pattern pattern dest-pat-stx)
(match (unwrap pattern)
[(NamedSimplePattern_ n p) (pattern->match-pattern p (maybe-dest dest-pat-stx (escape n)))]
[(Binding n p) (pattern->match-pattern p (maybe-dest dest-pat-stx (escape n)))]
[(SimplePattern-any) dest-pat-stx]
[(SimplePattern-atom atom-kind)
(maybe-dest dest-pat-stx

View File

@ -95,7 +95,7 @@
[n
(when (not (Pattern-SimplePattern? p))
(error 'parse-def-dsl "Named pattern in 'and' must be simple: ~a" (input->string input)))
(NamedPattern-named (NamedSimplePattern_ n (Pattern-SimplePattern-value p)))]))
(NamedPattern-named (Binding n (Pattern-SimplePattern-value p)))]))
(define (or-branch input)
(define p (parse-pattern-dsl name input))
(match (or (find-name input) (find-name (car input)))
@ -203,7 +203,7 @@
values
(lambda () (error 'parse-pattern-dsl "Named pattern must be simple: ~a"
(input->string b))))))
(knamed (NamedSimplePattern_ n p)))
(knamed (Binding n p)))
(kanonymous (recur b))))
(define maybe-named

View File

@ -83,10 +83,10 @@ AtomKind = =Boolean / =Float / =Double / =SignedInteger / =String / =ByteString
NamedAlternative = [@variantLabel string @pattern Pattern].
NamedSimplePattern = @named NamedSimplePattern_ / @anonymous SimplePattern .
NamedPattern = @named NamedSimplePattern_ / @anonymous Pattern .
NamedSimplePattern = @named Binding / @anonymous SimplePattern .
NamedPattern = @named Binding / @anonymous Pattern .
NamedSimplePattern_ = <named @name symbol @pattern SimplePattern>.
Binding = <named @name symbol @pattern SimplePattern>.
Ref = <ref @module ModulePath @name symbol>.
ModulePath = [symbol ...].

View File

@ -66,7 +66,7 @@
(define (gather-fields named-pat acc)
(match (unwrap named-pat)
[(NamedSimplePattern_ n p)
[(Binding n p)
(match (pattern-ty p)
[(ty-unit) acc]
[ty (cons (ty-field n ty p) acc)])]

View File

@ -12,7 +12,7 @@
(define (pattern->unparser pattern src-stx)
(match (unwrap pattern)
[(NamedSimplePattern_ n p) (pattern->unparser p (escape n))]
[(Binding n p) (pattern->unparser p (escape n))]
[(SimplePattern-any) `(*->preserve ,src-stx)]
[(SimplePattern-atom (AtomKind-Float)) `(->float (*->preserve ,src-stx))]
[(SimplePattern-atom (AtomKind-Double)) `(exact->inexact (*->preserve ,src-stx))]

View File

@ -4,7 +4,7 @@ title: "Preserves Schema"
---
Tony Garnock-Jones <tonyg@leastfixedpoint.com>
June 2021. Version 0.1.1.
June 2021. Version 0.1.2.
[abnf]: https://tools.ietf.org/html/rfc7405
@ -441,9 +441,9 @@ Explicitly-named subpatterns are always `SimplePattern`s; but,
depending on context, if a name is omitted, the pattern may be a
`Pattern` or may be restricted to `SimplePattern` as well:
NamedSimplePattern = @named NamedSimplePattern_ / @anonymous SimplePattern .
NamedPattern = @named NamedSimplePattern_ / @anonymous Pattern .
NamedSimplePattern_ = <named @name symbol @pattern SimplePattern>.
NamedSimplePattern = @named Binding / @anonymous SimplePattern .
NamedPattern = @named Binding / @anonymous Pattern .
Binding = <named @name symbol @pattern SimplePattern>.
[^todo-semantics-of-bundles]: The semantics of module path references
remain to be specified!
@ -486,7 +486,7 @@ metaschema.
Bundle: <rec <lit bundle> <tuple [<named modules <ref [] Modules>>]>>,
NamedSimplePattern_: <rec <lit named> <tuple [
Binding: <rec <lit named> <tuple [
<named name <atom Symbol>>,
<named pattern <ref [] SimplePattern>>
]>>,
@ -504,7 +504,7 @@ metaschema.
]>,
NamedSimplePattern: <or [
["named", <ref [] NamedSimplePattern_>],
["named", <ref [] Binding>],
["anonymous", <ref [] SimplePattern>]
]>,
@ -530,7 +530,7 @@ metaschema.
Version: <lit 1>,
NamedPattern: <or [
["named", <ref [] NamedSimplePattern_>],
["named", <ref [] Binding>],
["anonymous", <ref [] Pattern>]
]>,
@ -651,16 +651,16 @@ definitions for the metaschema.
export type NamedAlternative = {"variantLabel": string, "pattern": Pattern};
export type NamedSimplePattern = (
{"_variant": "named", "value": NamedSimplePattern_} |
{"_variant": "named", "value": Binding} |
{"_variant": "anonymous", "value": SimplePattern}
);
export type NamedPattern = (
{"_variant": "named", "value": NamedSimplePattern_} |
{"_variant": "named", "value": Binding} |
{"_variant": "anonymous", "value": Pattern}
);
export type NamedSimplePattern_ = {"name": symbol, "pattern": SimplePattern};
export type Binding = {"name": symbol, "pattern": SimplePattern};
export type Ref = {"module": ModulePath, "name": symbol};
@ -698,7 +698,7 @@ definitions for the metaschema.
(struct NamedSimplePattern-anonymous (value) #:prefab)
(struct NamedSimplePattern-named (value) #:prefab)
(struct NamedSimplePattern_ (name pattern) #:prefab)
(struct Binding (name pattern) #:prefab)
(struct Pattern-CompoundPattern (value) #:prefab)
(struct Pattern-SimplePattern (value) #:prefab)

View File

@ -1,8 +1,8 @@
´³schema·³version³ definitions·³Ref´³rec´³lit³ref„´³tupleµ´³named³module´³refµ„³
ModulePath„„´³named³name´³atom³Symbol„„„„„³Bundle´³rec´³lit³bundle„´³tupleµ´³named³modules´³refµ„³Modules„„„„„³Schema´³rec´³lit³schema„´³tupleµ´³dict·³version´³named³version´³refµ„³Version„„³ definitions´³named³ definitions´³refµ„³ Definitions„„³ embeddedType´³named³ embeddedType´³refµ„³EmbeddedTypeName„„„„„„„³Modules´³dictof´³refµ„³
ModulePath„„´³named³name´³atom³Symbol„„„„„³Bundle´³rec´³lit³bundle„´³tupleµ´³named³modules´³refµ„³Modules„„„„„³Schema´³rec´³lit³schema„´³tupleµ´³dict·³version´³named³version´³refµ„³Version„„³ definitions´³named³ definitions´³refµ„³ Definitions„„³ embeddedType´³named³ embeddedType´³refµ„³EmbeddedTypeName„„„„„„„³Binding´³rec´³lit³named„´³tupleµ´³named³name´³atom³Symbol„„´³named³pattern´³refµ„³ SimplePattern„„„„„³Modules´³dictof´³refµ„³
ModulePath„´³refµ„³Schema„„³Pattern´³orµµ± SimplePattern´³refµ„³ SimplePattern„„µ±CompoundPattern´³refµ„³CompoundPattern„„„„³Version´³lit„³AtomKind´³orµµ±Boolean´³lit³Boolean„„µ±Float´³lit³Float„„µ±Double´³lit³Double„„µ± SignedInteger´³lit³ SignedInteger„„µ±String´³lit³String„„µ±
ByteString´³lit³
ByteString„„µ±Symbol´³lit³Symbol„„„„³
Definition´³orµµ±or´³rec´³lit³or„´³tupleµ´³ tuplePrefixµ´³named³pattern0´³refµ„³NamedAlternative„„´³named³pattern1´³refµ„³NamedAlternative„„„´³named³patternN´³seqof´³refµ„³NamedAlternative„„„„„„„„µ±and´³rec´³lit³and„´³tupleµ´³ tuplePrefixµ´³named³pattern0´³refµ„³ NamedPattern„„´³named³pattern1´³refµ„³ NamedPattern„„„´³named³patternN´³seqof´³refµ„³ NamedPattern„„„„„„„„µ±Pattern´³refµ„³Pattern„„„„³
ModulePath´³seqof´³atom³Symbol„„³ Definitions´³dictof´³atom³Symbol„´³refµ„³
Definition„„³ NamedPattern´³orµµ±named´³refµ„³NamedSimplePattern_„„µ± anonymous´³refµ„³Pattern„„„„³ SimplePattern´³orµµ±any´³lit³any„„µ±atom´³rec´³lit³atom„´³tupleµ´³named³atomKind´³refµ„³AtomKind„„„„„„µ±embedded´³rec´³lit³embedded„´³tupleµ´³named³ interface´³refµ„³ SimplePattern„„„„„„µ±lit´³rec´³lit³lit„´³tupleµ´³named³value³any„„„„„µ±seqof´³rec´³lit³seqof„´³tupleµ´³named³pattern´³refµ„³ SimplePattern„„„„„„µ±setof´³rec´³lit³setof„´³tupleµ´³named³pattern´³refµ„³ SimplePattern„„„„„„µ±dictof´³rec´³lit³dictof„´³tupleµ´³named³key´³refµ„³ SimplePattern„„´³named³value´³refµ„³ SimplePattern„„„„„„µ±Ref´³refµ„³Ref„„„„³CompoundPattern´³orµµ±rec´³rec´³lit³rec„´³tupleµ´³named³label´³refµ„³ NamedPattern„„´³named³fields´³refµ„³ NamedPattern„„„„„„µ±tuple´³rec´³lit³tuple„´³tupleµ´³named³patterns´³seqof´³refµ„³ NamedPattern„„„„„„„µ± tuplePrefix´³rec´³lit³ tuplePrefix„´³tupleµ´³named³fixed´³seqof´³refµ„³ NamedPattern„„„´³named³variable´³refµ„³NamedSimplePattern„„„„„„µ±dict´³rec´³lit³dict„´³tupleµ´³named³entries´³refµ„³DictionaryEntries„„„„„„„„³EmbeddedTypeName´³orµµ±Ref´³refµ„³Ref„„µ±false´³lit€„„„„³NamedAlternative´³tupleµ´³named³ variantLabel´³atom³String„„´³named³pattern´³refµ„³Pattern„„„„³DictionaryEntries´³dictof³any´³refµ„³NamedSimplePattern„„³NamedSimplePattern´³orµµ±named´³refµ„³NamedSimplePattern_„„µ± anonymous´³refµ„³ SimplePattern„„„„³NamedSimplePattern_´³rec´³lit³named„´³tupleµ´³named³name´³atom³Symbol„„´³named³pattern´³refµ„³ SimplePattern„„„„„„³ embeddedType€„„
Definition„„³ NamedPattern´³orµµ±named´³refµ„³Binding„„µ± anonymous´³refµ„³Pattern„„„„³ SimplePattern´³orµµ±any´³lit³any„„µ±atom´³rec´³lit³atom„´³tupleµ´³named³atomKind´³refµ„³AtomKind„„„„„„µ±embedded´³rec´³lit³embedded„´³tupleµ´³named³ interface´³refµ„³ SimplePattern„„„„„„µ±lit´³rec´³lit³lit„´³tupleµ´³named³value³any„„„„„µ±seqof´³rec´³lit³seqof„´³tupleµ´³named³pattern´³refµ„³ SimplePattern„„„„„„µ±setof´³rec´³lit³setof„´³tupleµ´³named³pattern´³refµ„³ SimplePattern„„„„„„µ±dictof´³rec´³lit³dictof„´³tupleµ´³named³key´³refµ„³ SimplePattern„„´³named³value´³refµ„³ SimplePattern„„„„„„µ±Ref´³refµ„³Ref„„„„³CompoundPattern´³orµµ±rec´³rec´³lit³rec„´³tupleµ´³named³label´³refµ„³ NamedPattern„„´³named³fields´³refµ„³ NamedPattern„„„„„„µ±tuple´³rec´³lit³tuple„´³tupleµ´³named³patterns´³seqof´³refµ„³ NamedPattern„„„„„„„µ± tuplePrefix´³rec´³lit³ tuplePrefix„´³tupleµ´³named³fixed´³seqof´³refµ„³ NamedPattern„„„´³named³variable´³refµ„³NamedSimplePattern„„„„„„µ±dict´³rec´³lit³dict„´³tupleµ´³named³entries´³refµ„³DictionaryEntries„„„„„„„„³EmbeddedTypeName´³orµµ±Ref´³refµ„³Ref„„µ±false´³lit€„„„„³NamedAlternative´³tupleµ´³named³ variantLabel´³atom³String„„´³named³pattern´³refµ„³Pattern„„„„³DictionaryEntries´³dictof³any´³refµ„³NamedSimplePattern„„³NamedSimplePattern´³orµµ±named´³refµ„³Binding„„µ± anonymous´³refµ„³ SimplePattern„„„„„³ embeddedType€„„

View File

@ -83,10 +83,10 @@ AtomKind = =Boolean / =Float / =Double / =SignedInteger / =String / =ByteString
NamedAlternative = [@variantLabel string @pattern Pattern].
NamedSimplePattern = @named NamedSimplePattern_ / @anonymous SimplePattern .
NamedPattern = @named NamedSimplePattern_ / @anonymous Pattern .
NamedSimplePattern = @named Binding / @anonymous SimplePattern .
NamedPattern = @named Binding / @anonymous Pattern .
NamedSimplePattern_ = <named @name symbol @pattern SimplePattern>.
Binding = <named @name symbol @pattern SimplePattern>.
Ref = <ref @module ModulePath @name symbol>.
ModulePath = [symbol ...].