Class: Dhall::Union
- Inherits:
-
Expression
show all
- Defined in:
- lib/dhall/ast.rb,
lib/dhall/binary.rb,
lib/dhall/normalize.rb
Direct Known Subclasses
Enum
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Expression
#&, #*, #+, #annotate, #as_dhall, #cache_key, #call, #concat, #deep_merge, #deep_merge_type, #dhall_eq, #digest, #fetch, #fusion, #merge, #resolve, #shift, #slice, #substitute, #to_binary, #to_cbor, #to_proc, #|
Class Method Details
.decode(tag, value, alternatives) ⇒ Object
184
185
186
187
188
189
190
|
# File 'lib/dhall/binary.rb', line 184
def self.decode(tag, value, alternatives)
new(
tag: tag,
value: Dhall.decode(value),
alternatives: UnionType.decode(alternatives)
)
end
|
.from(alts, tag, value) ⇒ Object
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
|
# File 'lib/dhall/ast.rb', line 1024
def self.from(alts, tag, value)
if value.nil?
Enum.new(tag: tag, alternatives: alts.without(tag))
else
new(
tag: tag,
value: TypeAnnotation.new(value: value, type: alts[tag]),
alternatives: alts.without(tag)
)
end
end
|
Instance Method Details
#as_json ⇒ Object
1071
1072
1073
1074
1075
1076
1077
|
# File 'lib/dhall/ast.rb', line 1071
def as_json
if value.respond_to?(:type)
syntax.as_json
else
[12, tag, value&.as_json, alternatives.as_json.last]
end
end
|
1040
1041
1042
1043
1044
1045
1046
|
# File 'lib/dhall/ast.rb', line 1040
def
if value.is_a?(TypeAnnotation)
value.value
else
value
end
end
|
#normalize ⇒ Object
378
379
380
381
382
383
384
385
386
|
# File 'lib/dhall/normalize.rb', line 378
def normalize
val = if value.is_a?(TypeAnnotation)
value.with(ExpressionVisitor.new(&:normalize).visit(value))
else
value&.normalize
end
with(value: val, alternatives: alternatives.normalize)
end
|
#reduce(handlers) ⇒ Object
1048
1049
1050
1051
1052
1053
|
# File 'lib/dhall/ast.rb', line 1048
def reduce(handlers)
handlers = handlers.to_h
handler = handlers.fetch(tag.to_sym) { handlers.fetch(tag) }
(handler.respond_to?(:to_proc) ? handler.to_proc : handler)
.call()
end
|
#selection_syntax ⇒ Object
1055
1056
1057
1058
1059
1060
1061
1062
|
# File 'lib/dhall/ast.rb', line 1055
def selection_syntax
RecordSelection.new(
record: alternatives.merge(
UnionType.new(alternatives: { tag => value&.type })
),
selector: tag
)
end
|
#syntax ⇒ Object
1064
1065
1066
1067
1068
1069
|
# File 'lib/dhall/ast.rb', line 1064
def syntax
Application.new(
function: selection_syntax,
argument: value.is_a?(TypeAnnotation) ? value.value : value
)
end
|
#to_s ⇒ Object
1036
1037
1038
|
# File 'lib/dhall/ast.rb', line 1036
def to_s
.to_s
end
|