Allow as_dhall to be customised by encode_with
Dhall has a goal to replace YAML. Ruby's ecosystem already has deep
integration with YAML (specifically with the Psych implementation in
stdlib) -- so if an object customises its YAML encoding, but doesn't
know about Dhall, customise the Dhall encoding in a compatible way.
Remove hardcoded list of builtin names
Refactor OperatorListConcatenate typecheck
Refactor AnonymousType typecheck
First pass at import resolution
Make every Expression a ValueSemantics and use the known list of
attributes to map generically over any AST node.
Introduces a conditional, but removes boilerplate from every single
Implement many builtins and do Optional section