From 21c688d4f96f6f268c83a55f49073b5d611570d8 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Sat, 6 Apr 2019 21:25:29 -0500 Subject: [PATCH] Update to new UnionType selection semantics --- lib/dhall/ast.rb | 15 ++++++++++++--- lib/dhall/normalize.rb | 3 ++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/dhall/ast.rb b/lib/dhall/ast.rb index eadb0c8..cef6e7c 100644 --- a/lib/dhall/ast.rb +++ b/lib/dhall/ast.rb @@ -607,6 +607,16 @@ module Dhall selector ::String end) + def call(value) + if record.is_a?(UnionType) + type = record.alternatives.fetch(selector) + body = Union.from(record, selector, Variable[selector]) + Function.new(var: selector, type: type, body: body).call(value) + else + super + end + end + def as_json [9, record.as_json, selector] end @@ -659,9 +669,8 @@ module Dhall end def fetch(k, default=nil) - if (type = alternatives.fetch(k)) - body = Union.from(self, k, Variable[k]) - Function.new(var: k, type: type, body: body).normalize + if alternatives.fetch(k) + super(k) else Union.from(self, k, nil) end diff --git a/lib/dhall/normalize.rb b/lib/dhall/normalize.rb index 0eed75b..9870354 100644 --- a/lib/dhall/normalize.rb +++ b/lib/dhall/normalize.rb @@ -52,7 +52,8 @@ module Dhall return normalized.fuse if normalized.fuse if normalized.function.is_a?(Builtin) || - normalized.function.is_a?(Function) + normalized.function.is_a?(Function) || + normalized.function.is_a?(RecordSelection) return normalized.function.call(normalized.argument) end -- 2.34.5