dhall 0.3.0 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/bin/dhall-compile +38 -4
- data/bin/json-to-dhall +1 -1
- data/bin/yaml-to-dhall +1 -1
- data/dhall.gemspec +4 -0
- data/lib/dhall/as_dhall.rb +6 -0
- data/lib/dhall/ast.rb +291 -116
- data/lib/dhall/binary.rb +92 -17
- data/lib/dhall/builtins.rb +179 -238
- data/lib/dhall/coder.rb +6 -1
- data/lib/dhall/normalize.rb +59 -31
- data/lib/dhall/parser.citrus +73 -43
- data/lib/dhall/parser.rb +136 -103
- data/lib/dhall/resolve.rb +42 -32
- data/lib/dhall/typecheck.rb +171 -34
- data/lib/dhall/types.rb +19 -0
- data/lib/dhall/util.rb +49 -0
- data/lib/dhall.rb +1 -0
- metadata +60 -4
- data/lib/dhall/visitor.rb +0 -23
data/lib/dhall/coder.rb
CHANGED
@@ -105,7 +105,12 @@ module Dhall
|
|
105
105
|
|
106
106
|
refine List do
|
107
107
|
def to_ruby(&decode)
|
108
|
-
to_a.map(&decode)
|
108
|
+
arr = to_a.map(&decode)
|
109
|
+
unless element_type.is_a?(RecordType) &&
|
110
|
+
element_type.keys == ["mapKey", "mapValue"]
|
111
|
+
return arr
|
112
|
+
end
|
113
|
+
Hash[arr.map { |h| h.values_at("mapKey", "mapValue") }]
|
109
114
|
end
|
110
115
|
end
|
111
116
|
|
data/lib/dhall/normalize.rb
CHANGED
@@ -1,26 +1,37 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "dhall/builtins"
|
4
|
-
require "dhall/visitor"
|
5
4
|
require "dhall/util"
|
6
5
|
|
7
6
|
module Dhall
|
8
|
-
|
7
|
+
class ExpressionVisitor
|
9
8
|
ExpressionHash = Util::HashOf.new(
|
10
9
|
ValueSemantics::Anything,
|
11
10
|
ValueSemantics::Either.new([Expression, nil])
|
12
11
|
)
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
13
|
+
ExpressionArray = Util::ArrayOf.new(Expression)
|
14
|
+
|
15
|
+
def initialize(&block)
|
16
|
+
@block = block
|
17
|
+
end
|
18
|
+
|
19
|
+
def visit(expr)
|
20
|
+
expr.to_h.each_with_object({}) do |(attr, value), h|
|
21
|
+
result = one_visit(value)
|
22
|
+
h[attr] = result if result
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def one_visit(value)
|
27
|
+
case value
|
28
|
+
when Expression
|
29
|
+
@block[value]
|
30
|
+
when ExpressionArray
|
31
|
+
value.map(&@block)
|
32
|
+
when ExpressionHash
|
33
|
+
Hash[value.map { |k, v| [k, v.nil? ? v : @block[v]] }.sort]
|
34
|
+
end
|
24
35
|
end
|
25
36
|
end
|
26
37
|
|
@@ -51,7 +62,7 @@ module Dhall
|
|
51
62
|
normalized = super
|
52
63
|
return normalized.fuse if normalized.fuse
|
53
64
|
|
54
|
-
if normalized.function.is_a?(
|
65
|
+
if normalized.function.is_a?(BuiltinFunction) ||
|
55
66
|
normalized.function.is_a?(Function) ||
|
56
67
|
normalized.function.is_a?(RecordSelection)
|
57
68
|
return normalized.function.call(normalized.argument)
|
@@ -120,7 +131,7 @@ module Dhall
|
|
120
131
|
end
|
121
132
|
end
|
122
133
|
|
123
|
-
class
|
134
|
+
class FunctionProxyRaw
|
124
135
|
def shift(*)
|
125
136
|
self
|
126
137
|
end
|
@@ -138,6 +149,8 @@ module Dhall
|
|
138
149
|
def shift(amount, name, min_index)
|
139
150
|
return self if self.name != name || min_index > index
|
140
151
|
|
152
|
+
raise TypeError, "free variable" if (index + amount).negative?
|
153
|
+
|
141
154
|
with(index: index + amount)
|
142
155
|
end
|
143
156
|
|
@@ -232,7 +245,10 @@ module Dhall
|
|
232
245
|
|
233
246
|
class RightBiasedRecordMerge
|
234
247
|
def normalize
|
235
|
-
lhs.normalize
|
248
|
+
n_lhs = lhs.normalize
|
249
|
+
n_rhs = rhs.normalize
|
250
|
+
return n_lhs if n_lhs == n_rhs
|
251
|
+
n_lhs.merge(n_rhs)
|
236
252
|
end
|
237
253
|
end
|
238
254
|
|
@@ -245,7 +261,7 @@ module Dhall
|
|
245
261
|
|
246
262
|
class EmptyList
|
247
263
|
def normalize
|
248
|
-
super.with(
|
264
|
+
super.with(type: type.normalize)
|
249
265
|
end
|
250
266
|
end
|
251
267
|
|
@@ -265,6 +281,20 @@ module Dhall
|
|
265
281
|
end
|
266
282
|
end
|
267
283
|
|
284
|
+
class ToMap
|
285
|
+
def normalize
|
286
|
+
normalized = super
|
287
|
+
unless [Record, EmptyRecord].include?(normalized.record.class)
|
288
|
+
return normalized
|
289
|
+
end
|
290
|
+
|
291
|
+
List.of(*normalized.record.to_h.to_a.map do |(k, v)|
|
292
|
+
k = Text.new(value: k)
|
293
|
+
Record.new(record: { "mapKey" => k, "mapValue" => v })
|
294
|
+
end, type: normalized.type&.argument)
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
268
298
|
class Merge
|
269
299
|
def normalize
|
270
300
|
normalized = super
|
@@ -316,7 +346,19 @@ module Dhall
|
|
316
346
|
|
317
347
|
class RecordProjection
|
318
348
|
def normalize
|
319
|
-
record.normalize.slice(*selectors)
|
349
|
+
record.normalize.slice(*selectors.sort)
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
class RecordProjectionByExpression
|
354
|
+
def normalize
|
355
|
+
sel = selector.normalize
|
356
|
+
|
357
|
+
if sel.is_a?(RecordType)
|
358
|
+
RecordProjection.for(record, sel.keys).normalize
|
359
|
+
else
|
360
|
+
with(record: record.normalize, selector: sel)
|
361
|
+
end
|
320
362
|
end
|
321
363
|
end
|
322
364
|
|
@@ -415,20 +457,6 @@ module Dhall
|
|
415
457
|
end
|
416
458
|
end
|
417
459
|
|
418
|
-
class LetBlock
|
419
|
-
def normalize
|
420
|
-
desugar.normalize
|
421
|
-
end
|
422
|
-
|
423
|
-
def shift(amount, name, min_index)
|
424
|
-
unflatten.shift(amount, name, min_index)
|
425
|
-
end
|
426
|
-
|
427
|
-
def substitute(svar, with_expr)
|
428
|
-
unflatten.substitute(svar, with_expr)
|
429
|
-
end
|
430
|
-
end
|
431
|
-
|
432
460
|
class TypeAnnotation
|
433
461
|
def normalize
|
434
462
|
value.normalize
|
data/lib/dhall/parser.citrus
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
grammar Dhall::Parser::CitrusParser
|
2
2
|
root complete_expression
|
3
3
|
rule end_of_line
|
4
|
-
(/\n/i | (/(?:\r)(?:\n)/i))
|
4
|
+
(/\n/i | (/(?:\r)(?:\n)/i)) <Dhall::Parser::EndOfLine>
|
5
|
+
end
|
6
|
+
rule valid_non_ascii
|
7
|
+
(/[\u{80}-\u{d7ff}\u{e000}-\u{fffd}\u{10000}-\u{1fffd}\u{20000}-\u{2fffd}\u{30000}-\u{3fffd}\u{40000}-\u{4fffd}\u{50000}-\u{5fffd}\u{60000}-\u{6fffd}\u{70000}-\u{7fffd}\u{80000}-\u{8fffd}\u{90000}-\u{9fffd}\u{a0000}-\u{afffd}\u{b0000}-\u{bfffd}\u{c0000}-\u{cfffd}\u{d0000}-\u{dfffd}\u{e0000}-\u{efffd}\u{f0000}-\u{ffffd}\u{100000}-\u{10fffd}]/i)
|
5
8
|
end
|
6
9
|
rule tab
|
7
10
|
(/\t/i)
|
@@ -10,13 +13,13 @@ rule block_comment
|
|
10
13
|
(/(?:\u{7b})(?:\u{2d})/i (block_comment_continue))
|
11
14
|
end
|
12
15
|
rule block_comment_char
|
13
|
-
!("{-" | "-}") (/[\u{20}-@\u{5b}-\u{
|
16
|
+
!("{-" | "-}") (/[\u{20}-@\u{5b}-\u{7f}]/i | (valid_non_ascii) | (tab) | (end_of_line))
|
14
17
|
end
|
15
18
|
rule block_comment_continue
|
16
19
|
("-}" | block_comment_char+ block_comment_continue | (block_comment block_comment_continue))
|
17
20
|
end
|
18
21
|
rule not_end_of_line
|
19
|
-
(/[\u{20}-@\u{5b}-\u{
|
22
|
+
(/[\u{20}-@\u{5b}-\u{7f}]/i | (valid_non_ascii) | (tab))
|
20
23
|
end
|
21
24
|
rule line_comment
|
22
25
|
(/(?:\u{2d})(?:\u{2d})/i ((not_end_of_line)*) (end_of_line))
|
@@ -36,6 +39,9 @@ end
|
|
36
39
|
rule digit
|
37
40
|
(/\d/i)
|
38
41
|
end
|
42
|
+
rule alphanum
|
43
|
+
((alpha) | (digit))
|
44
|
+
end
|
39
45
|
rule hexdig
|
40
46
|
((digit) | /[a-f]/i | (digit) | /[a-f]/i)
|
41
47
|
end
|
@@ -43,7 +49,7 @@ rule simple_label_first_char
|
|
43
49
|
((alpha) | `_`)
|
44
50
|
end
|
45
51
|
rule simple_label_next_char
|
46
|
-
((
|
52
|
+
((alphanum) | /[\u{2d}\/_]/i)
|
47
53
|
end
|
48
54
|
rule simple_label
|
49
55
|
(keyword simple_label_next_char+ | !keyword (simple_label_first_char simple_label_next_char*))
|
@@ -67,16 +73,19 @@ rule double_quote_chunk
|
|
67
73
|
((interpolation) | (/\u{5c}/i (double_quote_escaped)) | (double_quote_char)) <Dhall::Parser::DoubleQuoteChunk>
|
68
74
|
end
|
69
75
|
rule double_quote_escaped
|
70
|
-
(/["\u{24}\/\u{5c}bfnrt]/ | ("u" (
|
76
|
+
(/["\u{24}\/\u{5c}bfnrt]/ | ("u" (unicode_escape))) <Dhall::Parser::DoubleQuoteEscaped>
|
77
|
+
end
|
78
|
+
rule unicode_escape
|
79
|
+
(((hexdig) 4*4) | (/\u{7b}/i ((hexdig)+) /\u{7d}/i))
|
71
80
|
end
|
72
81
|
rule double_quote_char
|
73
|
-
(/[\u{20}!\u{23}-@\u{5b}\u{5d}-\u{
|
82
|
+
(/[\u{20}!\u{23}-@\u{5b}\u{5d}-\u{7f}]/i | (valid_non_ascii))
|
74
83
|
end
|
75
84
|
rule double_quote_literal
|
76
85
|
(/"/i ((double_quote_chunk)*) /"/i) <Dhall::Parser::DoubleQuoteLiteral>
|
77
86
|
end
|
78
87
|
rule single_quote_continue
|
79
|
-
(
|
88
|
+
(single_quote_char+ single_quote_continue | interpolation single_quote_continue | escaped_quote_pair single_quote_continue | escaped_interpolation single_quote_continue | "''") <Dhall::Parser::SingleQuoteContinue>
|
80
89
|
end
|
81
90
|
rule escaped_quote_pair
|
82
91
|
(`'''`) <Dhall::Parser::EscapedQuotePair>
|
@@ -85,7 +94,7 @@ rule escaped_interpolation
|
|
85
94
|
(/(?:''(?:\u{24}))(?:\u{7b})/i) <Dhall::Parser::EscapedInterpolation>
|
86
95
|
end
|
87
96
|
rule single_quote_char
|
88
|
-
(/[\u{20}-@\u{5b}-\u{
|
97
|
+
!("${" | "''") (/[\u{20}-@\u{5b}-\u{7f}]/i | (valid_non_ascii) | (tab) | (end_of_line))
|
89
98
|
end
|
90
99
|
rule single_quote_literal
|
91
100
|
(`''` (end_of_line) (single_quote_continue)) <Dhall::Parser::SingleQuoteLiteral>
|
@@ -132,11 +141,17 @@ end
|
|
132
141
|
rule some
|
133
142
|
("Some")
|
134
143
|
end
|
144
|
+
rule tomap
|
145
|
+
("toMap")
|
146
|
+
end
|
147
|
+
rule assert
|
148
|
+
("assert")
|
149
|
+
end
|
135
150
|
rule keyword
|
136
|
-
((if) | (then) | (else) | (let) | (in) | (using) | (missing) | (as) | (infinity) | (nan) | (merge) | (some))
|
151
|
+
((if) | (then) | (else) | (let) | (in) | (using) | (missing) | (as) | (infinity) | (nan) | (merge) | (some) | (tomap))
|
137
152
|
end
|
138
153
|
rule builtin
|
139
|
-
((natural_fold) | (natural_build) | (natural_iszero) | (natural_even) | (natural_odd) | (natural_tointeger) | (natural_show) | (integer_todouble) | (integer_show) | (double_show) | (list_build) | (list_fold) | (list_length) | (list_head) | (list_last) | (list_indexed) | (list_reverse) | (optional_fold) | (optional_build) | (text_show) | (bool) | (true) | (false) | (optional) | (none) | (natural) | (integer) | (double) | (text) | (list) | (type) | (kind) | (sort)) <Dhall::Parser::Builtin>
|
154
|
+
((natural_fold) | (natural_build) | (natural_iszero) | (natural_even) | (natural_odd) | (natural_tointeger) | (natural_show) | (integer_todouble) | (integer_show) | (natural_subtract) | (double_show) | (list_build) | (list_fold) | (list_length) | (list_head) | (list_last) | (list_indexed) | (list_reverse) | (optional_fold) | (optional_build) | (text_show) | (bool) | (true) | (false) | (optional) | (none) | (natural) | (integer) | (double) | (text) | (list) | (type) | (kind) | (sort)) <Dhall::Parser::Builtin>
|
140
155
|
end
|
141
156
|
rule optional
|
142
157
|
("Optional")
|
@@ -147,6 +162,9 @@ end
|
|
147
162
|
rule list
|
148
163
|
("List")
|
149
164
|
end
|
165
|
+
rule location
|
166
|
+
("Location")
|
167
|
+
end
|
150
168
|
rule bool
|
151
169
|
("Bool")
|
152
170
|
end
|
@@ -198,6 +216,9 @@ end
|
|
198
216
|
rule natural_show
|
199
217
|
("Natural" /\//i "s" "h" "o" "w")
|
200
218
|
end
|
219
|
+
rule natural_subtract
|
220
|
+
("Natural" /\//i "s" "u" "b" "t" "r" "a" "c" "t")
|
221
|
+
end
|
201
222
|
rule integer_todouble
|
202
223
|
("Integer" /\//i "t" "o" "D" "o" "u" "b" "l" "e")
|
203
224
|
end
|
@@ -243,6 +264,9 @@ end
|
|
243
264
|
rule combine_types
|
244
265
|
(/\u{2a53}/i | (/(?:(?:(?:\/)(?:\/))(?:\u{5c}))(?:\u{5c})/i))
|
245
266
|
end
|
267
|
+
rule equivalent
|
268
|
+
(/\u{2261}/i | (/(?:(?:=)(?:=))(?:=)/i))
|
269
|
+
end
|
246
270
|
rule prefer
|
247
271
|
(/\u{2afd}/i | (/(?:\/)(?:\/)/i))
|
248
272
|
end
|
@@ -286,7 +310,7 @@ rule path_character
|
|
286
310
|
(/[!\u{24}-'\u{2a}\u{2b}\u{2d}\u{2e}0-;=@\u{5e}-z\u{7c}~]/i)
|
287
311
|
end
|
288
312
|
rule quoted_path_character
|
289
|
-
(/[\u{20}!\u{23}-\u{2e}0-@\u{5b}-\u{
|
313
|
+
(/[\u{20}!\u{23}-\u{2e}0-@\u{5b}-\u{7f}]/i | (valid_non_ascii))
|
290
314
|
end
|
291
315
|
rule unquoted_path_component
|
292
316
|
((path_character)+)
|
@@ -316,19 +340,22 @@ rule absolute_path
|
|
316
340
|
(path) <Dhall::Parser::AbsolutePath>
|
317
341
|
end
|
318
342
|
rule scheme
|
319
|
-
("http" ("s"?))
|
343
|
+
("http" ("s"?)) <Dhall::Parser::Scheme>
|
320
344
|
end
|
321
345
|
rule http_raw
|
322
|
-
((scheme) /(?::(?:\/))(?:\/)/i (authority) (
|
346
|
+
((scheme) /(?::(?:\/))(?:\/)/i (authority) (url_path) ((/\u{3f}/i (query))?))
|
347
|
+
end
|
348
|
+
rule url_path
|
349
|
+
(((path_component) | (/\//i (segment)))*) <Dhall::Parser::UrlPath>
|
323
350
|
end
|
324
351
|
rule authority
|
325
|
-
((((userinfo) /@/i)?) (host) ((`:` (port))?))
|
352
|
+
((((userinfo) /@/i)?) (host) ((`:` (port))?)) <Dhall::Parser::Authority>
|
326
353
|
end
|
327
354
|
rule userinfo
|
328
355
|
(((unreserved) | (pct_encoded) | (sub_delims) | `:`)*)
|
329
356
|
end
|
330
357
|
rule host
|
331
|
-
((ip_literal) | (ipv4address) | (
|
358
|
+
((ip_literal) | (ipv4address) | (domain))
|
332
359
|
end
|
333
360
|
rule port
|
334
361
|
((digit)*)
|
@@ -354,8 +381,14 @@ end
|
|
354
381
|
rule dec_octet
|
355
382
|
((/25(?:[0-5])/i) | (/2(?:[0-4])/i (digit)) | (`1` ((digit) 2*2)) | (/[1-9]/i (digit)) | (digit))
|
356
383
|
end
|
357
|
-
rule
|
358
|
-
((
|
384
|
+
rule domain
|
385
|
+
((domainlabel) ((/\u{2e}/i (domainlabel))*) (/\u{2e}/i?))
|
386
|
+
end
|
387
|
+
rule domainlabel
|
388
|
+
(((alphanum)+) (((/\u{2d}/i+) ((alphanum)+))*))
|
389
|
+
end
|
390
|
+
rule segment
|
391
|
+
((pchar)*)
|
359
392
|
end
|
360
393
|
rule pchar
|
361
394
|
((unreserved) | (pct_encoded) | (sub_delims) | /[:@]/i)
|
@@ -367,19 +400,19 @@ rule pct_encoded
|
|
367
400
|
(/%/i (hexdig) (hexdig))
|
368
401
|
end
|
369
402
|
rule unreserved
|
370
|
-
((
|
403
|
+
((alphanum) | /[\u{2d}\u{2e}_~]/i)
|
371
404
|
end
|
372
405
|
rule sub_delims
|
373
|
-
(/[!\u{24}
|
406
|
+
(/[!\u{24}&'\u{2a}\u{2b};=]/i)
|
374
407
|
end
|
375
408
|
rule http
|
376
|
-
((http_raw) (((whsp) (using) (whsp1) (
|
409
|
+
((http_raw) (((whsp) (using) (whsp1) (import_expression))?)) <Dhall::Parser::Http>
|
377
410
|
end
|
378
411
|
rule env
|
379
412
|
(`env:` ((bash_environment_variable) | (/"/i (posix_environment_variable) /"/i))) <Dhall::Parser::Env>
|
380
413
|
end
|
381
414
|
rule bash_environment_variable
|
382
|
-
(((alpha) | `_`) (((
|
415
|
+
(((alpha) | `_`) (((alphanum) | `_`)*))
|
383
416
|
end
|
384
417
|
rule posix_environment_variable
|
385
418
|
((posix_environment_variable_character)+) <Dhall::Parser::PosixEnvironmentVariable>
|
@@ -397,10 +430,10 @@ rule import_hashed
|
|
397
430
|
((import_type) (((whsp1) (hash))?)) <Dhall::Parser::ImportHashed>
|
398
431
|
end
|
399
432
|
rule import
|
400
|
-
((import_hashed) (((whsp) (as) (whsp1) (text))?)) <Dhall::Parser::Import>
|
433
|
+
((import_hashed) (((whsp) (as) (whsp1) ((text) | (location)))?)) <Dhall::Parser::Import>
|
401
434
|
end
|
402
435
|
rule expression
|
403
|
-
(((lambda) (whsp) /\u{28}/i (whsp) (nonreserved_label) (whsp) `:` (whsp1) (expression) (whsp) /\u{29}/i (whsp) (arrow) (whsp) (expression)) | ((if) (whsp1) (expression) (whsp) (then) (whsp1) (expression) (whsp) (else) (whsp1) (expression)) | (((let_binding)+) (in) (whsp1) (expression)) | ((forall) (whsp) /\u{28}/i (whsp) (nonreserved_label) (whsp) `:` (whsp1) (expression) (whsp) /\u{29}/i (whsp) (arrow) (whsp) (expression)) | ((operator_expression) (whsp) (arrow) (whsp) (expression)) | ((merge) (whsp1) (import_expression) (whsp1) (import_expression) (whsp) `:` (whsp1) (application_expression)) | (
|
436
|
+
(((lambda) (whsp) /\u{28}/i (whsp) (nonreserved_label) (whsp) `:` (whsp1) (expression) (whsp) /\u{29}/i (whsp) (arrow) (whsp) (expression)) | ((if) (whsp1) (expression) (whsp) (then) (whsp1) (expression) (whsp) (else) (whsp1) (expression)) | (((let_binding)+) (in) (whsp1) (expression)) | ((forall) (whsp) /\u{28}/i (whsp) (nonreserved_label) (whsp) `:` (whsp1) (expression) (whsp) /\u{29}/i (whsp) (arrow) (whsp) (expression)) | ((operator_expression) (whsp) (arrow) (whsp) (expression)) | ((merge) (whsp1) (import_expression) (whsp1) (import_expression) (whsp) `:` (whsp1) (application_expression)) | (empty_list_literal) | ((tomap) (whsp1) (import_expression) (whsp) `:` (whsp1) (application_expression)) | ((assert) (whsp) `:` (whsp1) (expression)) | (annotated_expression)) <Dhall::Parser::Expression>
|
404
437
|
end
|
405
438
|
rule annotated_expression
|
406
439
|
((operator_expression) (((whsp) `:` (whsp1) (expression))?)) <Dhall::Parser::AnnotatedExpression>
|
@@ -408,11 +441,8 @@ end
|
|
408
441
|
rule let_binding
|
409
442
|
((let) (whsp1) (nonreserved_label) (whsp) ((`:` (whsp1) (expression) (whsp))?) /=/i (whsp) (expression) (whsp)) <Dhall::Parser::LetBinding>
|
410
443
|
end
|
411
|
-
rule
|
412
|
-
(/\u{
|
413
|
-
end
|
414
|
-
rule non_empty_optional
|
415
|
-
((expression) (whsp) /\u{5d}/i (whsp) `:` (whsp1) (optional) (whsp) (import_expression)) <Dhall::Parser::NonEmptyOptional>
|
444
|
+
rule empty_list_literal
|
445
|
+
(/\u{5b}/i (whsp) /\u{5d}/i (whsp) `:` (whsp1) (application_expression))
|
416
446
|
end
|
417
447
|
rule operator_expression
|
418
448
|
(import_alt_expression)
|
@@ -451,13 +481,16 @@ rule equal_expression
|
|
451
481
|
((not_equal_expression) (((whsp) /(?:=)(?:=)/i (whsp) (not_equal_expression))*)) <Dhall::Parser::EqualExpression>
|
452
482
|
end
|
453
483
|
rule not_equal_expression
|
454
|
-
((
|
484
|
+
((equivalent_expression) (((whsp) /(?:!)(?:=)/i (whsp) (equivalent_expression))*)) <Dhall::Parser::NotEqualExpression>
|
485
|
+
end
|
486
|
+
rule equivalent_expression
|
487
|
+
((application_expression) (((whsp) (equivalent) (whsp) (application_expression))*)) <Dhall::Parser::EquivalentExpression>
|
455
488
|
end
|
456
489
|
rule application_expression
|
457
490
|
((first_application_expression) (((whsp1) (import_expression))*)) <Dhall::Parser::ApplicationExpression>
|
458
491
|
end
|
459
492
|
rule first_application_expression
|
460
|
-
(((merge) (whsp1) (import_expression) (whsp1) (import_expression)) | ((some) (whsp1) (import_expression)) | (import_expression)) <Dhall::Parser::FirstApplicationExpression>
|
493
|
+
(((merge) (whsp1) (import_expression) (whsp1) (import_expression)) | ((some) (whsp1) (import_expression)) | ((tomap) (whsp1) (import_expression)) | (import_expression)) <Dhall::Parser::FirstApplicationExpression>
|
461
494
|
end
|
462
495
|
rule import_expression
|
463
496
|
((import) | (selector_expression))
|
@@ -466,13 +499,16 @@ rule selector_expression
|
|
466
499
|
((primitive_expression) (((whsp) /\u{2e}/i (whsp) (selector))*)) <Dhall::Parser::SelectorExpression>
|
467
500
|
end
|
468
501
|
rule selector
|
469
|
-
((any_label) | (labels))
|
502
|
+
((any_label) | (labels) | (type_selector)) <Dhall::Parser::Selector>
|
470
503
|
end
|
471
504
|
rule labels
|
472
|
-
(/\u{7b}/i (whsp) (((any_label) (whsp) ((/,/i (whsp) (any_label) (whsp))*))?) /\u{7d}/i)
|
505
|
+
(/\u{7b}/i (whsp) (((any_label) (whsp) ((/,/i (whsp) (any_label) (whsp))*))?) /\u{7d}/i)
|
506
|
+
end
|
507
|
+
rule type_selector
|
508
|
+
(/\u{28}/i (whsp) (expression) (whsp) /\u{29}/i)
|
473
509
|
end
|
474
510
|
rule primitive_expression
|
475
|
-
((double_literal) | (natural_literal) | (integer_literal) | (text_literal) | (/\u{7b}/i (whsp) (record_type_or_literal) (whsp) /\u{7d}/i) | (/</i (whsp) (
|
511
|
+
((double_literal) | (natural_literal) | (integer_literal) | (text_literal) | (/\u{7b}/i (whsp) (record_type_or_literal) (whsp) /\u{7d}/i) | (/</i (whsp) (union_type) (whsp) />/i) | (non_empty_list_literal) | (identifier) | (/\u{28}/i (complete_expression) /\u{29}/i)) <Dhall::Parser::PrimitiveExpression>
|
476
512
|
end
|
477
513
|
rule record_type_or_literal
|
478
514
|
((empty_record_literal) | (non_empty_record_type_or_literal) | (empty_record_type))
|
@@ -498,24 +534,18 @@ end
|
|
498
534
|
rule record_literal_entry
|
499
535
|
((any_label) (whsp) /=/i (whsp) (expression)) <Dhall::Parser::RecordLiteralEntry>
|
500
536
|
end
|
501
|
-
rule
|
502
|
-
((
|
537
|
+
rule union_type
|
538
|
+
((non_empty_union_type) | (empty_union_type))
|
503
539
|
end
|
504
540
|
rule empty_union_type
|
505
541
|
("") <Dhall::Parser::EmptyUnionType>
|
506
542
|
end
|
507
|
-
rule
|
508
|
-
((
|
509
|
-
end
|
510
|
-
rule union_literal_variant_value
|
511
|
-
(/=/i (whsp) (expression) (((whsp) /\u{7c}/i (whsp) (union_type_entry))*)) <Dhall::Parser::UnionLiteralVariantValue>
|
543
|
+
rule non_empty_union_type
|
544
|
+
((union_type_entry) (((whsp) /\u{7c}/i (whsp) (union_type_entry))*)) <Dhall::Parser::NonEmptyUnionType>
|
512
545
|
end
|
513
546
|
rule union_type_entry
|
514
547
|
((any_label) (((whsp) `:` (whsp1) (expression))?)) <Dhall::Parser::UnionTypeEntry>
|
515
548
|
end
|
516
|
-
rule union_type_or_literal_variant_type
|
517
|
-
(((`:` (whsp1) (expression))?) (((whsp) /\u{7c}/i (whsp) (non_empty_union_type_or_literal))?)) <Dhall::Parser::UnionTypeOrLiteralVariantType>
|
518
|
-
end
|
519
549
|
rule non_empty_list_literal
|
520
550
|
(/\u{5b}/i (whsp) (expression) (whsp) ((/,/i (whsp) (expression) (whsp))*) /\u{5d}/i) <Dhall::Parser::NonEmptyListLiteral>
|
521
551
|
end
|