Class: Dhall::ExpressionVisitor

Inherits:
Object
  • Object
show all
Defined in:
lib/dhall/normalize.rb

Constant Summary collapse

ExpressionHash =
Util::HashOf.new(
  ValueSemantics::Anything,
  ValueSemantics::Either.new([Expression, nil])
)
ExpressionArray =
Util::ArrayOf.new(Expression)

Instance Method Summary collapse

Constructor Details

#initialize(&block) ⇒ ExpressionVisitor

Returns a new instance of ExpressionVisitor.



15
16
17
# File 'lib/dhall/normalize.rb', line 15

def initialize(&block)
  @block = block
end

Instance Method Details

#one_visit(value) ⇒ Object



26
27
28
29
30
31
32
33
34
35
# File 'lib/dhall/normalize.rb', line 26

def one_visit(value)
  case value
  when Expression
    @block[value]
  when ExpressionArray
    value.map(&@block)
  when ExpressionHash
    Hash[value.map { |k, v| [k, v.nil? ? v : @block[v]] }.sort]
  end
end

#visit(expr) ⇒ Object



19
20
21
22
23
24
# File 'lib/dhall/normalize.rb', line 19

def visit(expr)
  expr.to_h.each_with_object({}) do |(attr, value), h|
    result = one_visit(value)
    h[attr] = result if result
  end
end