371 files changed, 990 insertions(+), 446 deletions(-)
M .builds.dhall/debian-stable.dhall
M .builds/debian-stable.yml
A .gitignore
M Gemfile
A Makefile
M dhall-lang
M lib/dhall.rb
M lib/dhall/ast.rb
M lib/dhall/binary.rb
M lib/dhall/normalize.rb
A lib/dhall/parser.rb
M lib/dhall/util.rb
A scripts/generate_citrus_parser.rb
D test/normalization/alpha/FunctionBindingUnderscoreA.dhallb
D test/normalization/alpha/FunctionBindingUnderscoreB.dhallb
D test/normalization/alpha/FunctionBindingXA.dhallb
D test/normalization/alpha/FunctionBindingXB.dhallb
D test/normalization/alpha/FunctionNestedBindingXA.dhallb
D test/normalization/alpha/FunctionNestedBindingXB.dhallb
D test/normalization/alpha/FunctionTypeBindingUnderscoreA.dhallb
D test/normalization/alpha/FunctionTypeBindingUnderscoreB.dhallb
D test/normalization/alpha/FunctionTypeBindingXA.dhallb
D test/normalization/alpha/FunctionTypeBindingXB.dhallb
D test/normalization/alpha/FunctionTypeNestedBindingXA.dhallb
D test/normalization/alpha/FunctionTypeNestedBindingXB.dhallb
D test/normalization/beta/BoolA.dhallb
D test/normalization/beta/BoolB.dhallb
D test/normalization/beta/DoubleA.dhallb
D test/normalization/beta/DoubleB.dhallb
D test/normalization/beta/DoubleLiteralA.dhallb
D test/normalization/beta/DoubleLiteralB.dhallb
D test/normalization/beta/DoubleShowA.dhallb
D test/normalization/beta/DoubleShowB.dhallb
D test/normalization/beta/DoubleShowValueA.dhallb
D test/normalization/beta/DoubleShowValueB.dhallb
D test/normalization/beta/FunctionApplicationCaptureA.dhallb
D test/normalization/beta/FunctionApplicationCaptureB.dhallb
D test/normalization/beta/FunctionApplicationNoSubstituteA.dhallb
D test/normalization/beta/FunctionApplicationNoSubstituteB.dhallb
D test/normalization/beta/FunctionApplicationNormalizeArgumentsA.dhallb
D test/normalization/beta/FunctionApplicationNormalizeArgumentsB.dhallb
D test/normalization/beta/FunctionApplicationSubstituteA.dhallb
D test/normalization/beta/FunctionApplicationSubstituteB.dhallb
D test/normalization/beta/FunctionNormalizeArgumentsA.dhallb
D test/normalization/beta/FunctionNormalizeArgumentsB.dhallb
D test/normalization/beta/FunctionTypeNormalizeArgumentsA.dhallb
D test/normalization/beta/FunctionTypeNormalizeArgumentsB.dhallb
D test/normalization/beta/IfAlternativesIdenticalA.dhallb
D test/normalization/beta/IfAlternativesIdenticalB.dhallb
D test/normalization/beta/IfFalseA.dhallb
D test/normalization/beta/IfFalseB.dhallb
D test/normalization/beta/IfNormalizePredicateAndBranchesA.dhallb
D test/normalization/beta/IfNormalizePredicateAndBranchesB.dhallb
D test/normalization/beta/IfTrivialA.dhallb
D test/normalization/beta/IfTrivialB.dhallb
D test/normalization/beta/IfTrueA.dhallb
D test/normalization/beta/IfTrueB.dhallb
D test/normalization/beta/IntegerA.dhallb
D test/normalization/beta/IntegerB.dhallb
D test/normalization/beta/IntegerNegativeA.dhallb
D test/normalization/beta/IntegerNegativeB.dhallb
D test/normalization/beta/IntegerPositiveA.dhallb
D test/normalization/beta/IntegerPositiveB.dhallb
D test/normalization/beta/IntegerShow-12A.dhallb
D test/normalization/beta/IntegerShow-12B.dhallb
D test/normalization/beta/IntegerShow12A.dhallb
D test/normalization/beta/IntegerShow12B.dhallb
D test/normalization/beta/IntegerShowA.dhallb
D test/normalization/beta/IntegerShowB.dhallb
D test/normalization/beta/IntegerToDouble-12A.dhallb
D test/normalization/beta/IntegerToDouble-12B.dhallb
D test/normalization/beta/IntegerToDouble12A.dhallb
D test/normalization/beta/IntegerToDouble12B.dhallb
D test/normalization/beta/IntegerToDoubleA.dhallb
D test/normalization/beta/IntegerToDoubleB.dhallb
D test/normalization/beta/KindA.dhallb
D test/normalization/beta/KindB.dhallb
D test/normalization/beta/LetA.dhallb
D test/normalization/beta/LetB.dhallb
D test/normalization/beta/LetWithTypeA.dhallb
D test/normalization/beta/LetWithTypeB.dhallb
D test/normalization/beta/ListA.dhallb
D test/normalization/beta/ListB.dhallb
D test/normalization/beta/ListBuildA.dhallb
D test/normalization/beta/ListBuildB.dhallb
D test/normalization/beta/ListBuildFoldFusionA.dhallb
D test/normalization/beta/ListBuildFoldFusionB.dhallb
D test/normalization/beta/ListBuildImplementationA.dhallb
D test/normalization/beta/ListBuildImplementationB.dhallb
D test/normalization/beta/ListFoldA.dhallb
D test/normalization/beta/ListFoldB.dhallb
D test/normalization/beta/ListFoldEmptyA.dhallb
D test/normalization/beta/ListFoldEmptyB.dhallb
D test/normalization/beta/ListFoldOneA.dhallb
D test/normalization/beta/ListFoldOneB.dhallb
D test/normalization/beta/ListHeadA.dhallb
D test/normalization/beta/ListHeadB.dhallb
D test/normalization/beta/ListHeadEmptyA.dhallb
D test/normalization/beta/ListHeadEmptyB.dhallb
D test/normalization/beta/ListHeadOneA.dhallb
D test/normalization/beta/ListHeadOneB.dhallb
D test/normalization/beta/ListIndexedA.dhallb
D test/normalization/beta/ListIndexedB.dhallb
D test/normalization/beta/ListIndexedEmptyA.dhallb
D test/normalization/beta/ListIndexedEmptyB.dhallb
D test/normalization/beta/ListIndexedOneA.dhallb
D test/normalization/beta/ListIndexedOneB.dhallb
D test/normalization/beta/ListLastA.dhallb
D test/normalization/beta/ListLastB.dhallb
D test/normalization/beta/ListLastEmptyA.dhallb
D test/normalization/beta/ListLastEmptyB.dhallb
D test/normalization/beta/ListLastOneA.dhallb
D test/normalization/beta/ListLastOneB.dhallb
D test/normalization/beta/ListLengthA.dhallb
D test/normalization/beta/ListLengthB.dhallb
D test/normalization/beta/ListLengthEmptyA.dhallb
D test/normalization/beta/ListLengthEmptyB.dhallb
D test/normalization/beta/ListLengthOneA.dhallb
D test/normalization/beta/ListLengthOneB.dhallb
D test/normalization/beta/ListNormalizeElementsA.dhallb
D test/normalization/beta/ListNormalizeElementsB.dhallb
D test/normalization/beta/ListNormalizeTypeAnnotationA.dhallb
D test/normalization/beta/ListNormalizeTypeAnnotationB.dhallb
D test/normalization/beta/ListReverseA.dhallb
D test/normalization/beta/ListReverseB.dhallb
D test/normalization/beta/ListReverseEmptyA.dhallb
D test/normalization/beta/ListReverseEmptyB.dhallb
D test/normalization/beta/ListReverseTwoA.dhallb
D test/normalization/beta/ListReverseTwoB.dhallb
D test/normalization/beta/MergeA.dhallb
D test/normalization/beta/MergeB.dhallb
D test/normalization/beta/MergeNormalizeArgumentsA.dhallb
D test/normalization/beta/MergeNormalizeArgumentsB.dhallb
D test/normalization/beta/MergeWithTypeA.dhallb
D test/normalization/beta/MergeWithTypeB.dhallb
D test/normalization/beta/MergeWithTypeNormalizeArgumentsA.dhallb
D test/normalization/beta/MergeWithTypeNormalizeArgumentsB.dhallb
D test/normalization/beta/NaturalA.dhallb
D test/normalization/beta/NaturalB.dhallb
D test/normalization/beta/NaturalBuildA.dhallb
D test/normalization/beta/NaturalBuildB.dhallb
D test/normalization/beta/NaturalBuildFoldFusionA.dhallb
D test/normalization/beta/NaturalBuildFoldFusionB.dhallb
D test/normalization/beta/NaturalBuildImplementationA.dhallb
D test/normalization/beta/NaturalBuildImplementationB.dhallb
D test/normalization/beta/NaturalEvenA.dhallb
D test/normalization/beta/NaturalEvenB.dhallb
D test/normalization/beta/NaturalEvenOneA.dhallb
D test/normalization/beta/NaturalEvenOneB.dhallb
D test/normalization/beta/NaturalEvenZeroA.dhallb
D test/normalization/beta/NaturalEvenZeroB.dhallb
D test/normalization/beta/NaturalFoldA.dhallb
D test/normalization/beta/NaturalFoldB.dhallb
D test/normalization/beta/NaturalFoldOneA.dhallb
D test/normalization/beta/NaturalFoldOneB.dhallb
D test/normalization/beta/NaturalFoldZeroA.dhallb
D test/normalization/beta/NaturalFoldZeroB.dhallb
D test/normalization/beta/NaturalIsZeroA.dhallb
D test/normalization/beta/NaturalIsZeroB.dhallb
D test/normalization/beta/NaturalIsZeroOneA.dhallb
D test/normalization/beta/NaturalIsZeroOneB.dhallb
D test/normalization/beta/NaturalIsZeroZeroA.dhallb
D test/normalization/beta/NaturalIsZeroZeroB.dhallb
D test/normalization/beta/NaturalLiteralA.dhallb
D test/normalization/beta/NaturalLiteralB.dhallb
D test/normalization/beta/NaturalOddA.dhallb
D test/normalization/beta/NaturalOddB.dhallb
D test/normalization/beta/NaturalOddOneA.dhallb
D test/normalization/beta/NaturalOddOneB.dhallb
D test/normalization/beta/NaturalOddZeroA.dhallb
D test/normalization/beta/NaturalOddZeroB.dhallb
D test/normalization/beta/NaturalShowA.dhallb
D test/normalization/beta/NaturalShowB.dhallb
D test/normalization/beta/NaturalShowOneA.dhallb
D test/normalization/beta/NaturalShowOneB.dhallb
D test/normalization/beta/NaturalToIntegerA.dhallb
D test/normalization/beta/NaturalToIntegerB.dhallb
D test/normalization/beta/NaturalToIntegerOneA.dhallb
D test/normalization/beta/NaturalToIntegerOneB.dhallb
D test/normalization/beta/NoneA.dhallb
D test/normalization/beta/NoneB.dhallb
D test/normalization/beta/NoneNaturalA.dhallb
D test/normalization/beta/NoneNaturalB.dhallb
D test/normalization/beta/OperatorAndEquivalentArgumentsA.dhallb
D test/normalization/beta/OperatorAndEquivalentArgumentsB.dhallb
D test/normalization/beta/OperatorAndLhsFalseA.dhallb
D test/normalization/beta/OperatorAndLhsFalseB.dhallb
D test/normalization/beta/OperatorAndLhsTrueA.dhallb
D test/normalization/beta/OperatorAndLhsTrueB.dhallb
D test/normalization/beta/OperatorAndNormalizeArgumentsA.dhallb
D test/normalization/beta/OperatorAndNormalizeArgumentsB.dhallb
D test/normalization/beta/OperatorAndRhsFalseA.dhallb
D test/normalization/beta/OperatorAndRhsFalseB.dhallb
D test/normalization/beta/OperatorAndRhsTrueA.dhallb
D test/normalization/beta/OperatorAndRhsTrueB.dhallb
D test/normalization/beta/OperatorEqualEquivalentArgumentsA.dhallb
D test/normalization/beta/OperatorEqualEquivalentArgumentsB.dhallb
D test/normalization/beta/OperatorEqualLhsTrueA.dhallb
D test/normalization/beta/OperatorEqualLhsTrueB.dhallb
D test/normalization/beta/OperatorEqualNormalizeArgumentsA.dhallb
D test/normalization/beta/OperatorEqualNormalizeArgumentsB.dhallb
D test/normalization/beta/OperatorEqualRhsTrueA.dhallb
D test/normalization/beta/OperatorEqualRhsTrueB.dhallb
D test/normalization/beta/OperatorListConcatenateLhsEmptyA.dhallb
D test/normalization/beta/OperatorListConcatenateLhsEmptyB.dhallb
D test/normalization/beta/OperatorListConcatenateListListA.dhallb
D test/normalization/beta/OperatorListConcatenateListListB.dhallb
D test/normalization/beta/OperatorListConcatenateNormalizeArgumentsA.dhallb
D test/normalization/beta/OperatorListConcatenateNormalizeArgumentsB.dhallb
D test/normalization/beta/OperatorListConcatenateRhsEmptyA.dhallb
D test/normalization/beta/OperatorListConcatenateRhsEmptyB.dhallb
D test/normalization/beta/OperatorNotEqualEquivalentArgumentsA.dhallb
D test/normalization/beta/OperatorNotEqualEquivalentArgumentsB.dhallb
D test/normalization/beta/OperatorNotEqualLhsFalseA.dhallb
D test/normalization/beta/OperatorNotEqualLhsFalseB.dhallb
D test/normalization/beta/OperatorNotEqualNormalizeArgumentsA.dhallb
D test/normalization/beta/OperatorNotEqualNormalizeArgumentsB.dhallb
D test/normalization/beta/OperatorNotEqualRhsFalseA.dhallb
D test/normalization/beta/OperatorNotEqualRhsFalseB.dhallb
D test/normalization/beta/OperatorOrEquivalentArgumentsA.dhallb
D test/normalization/beta/OperatorOrEquivalentArgumentsB.dhallb
D test/normalization/beta/OperatorOrLhsFalseA.dhallb
D test/normalization/beta/OperatorOrLhsFalseB.dhallb
D test/normalization/beta/OperatorOrLhsTrueA.dhallb
D test/normalization/beta/OperatorOrLhsTrueB.dhallb
D test/normalization/beta/OperatorOrNormalizeArgumentsA.dhallb
D test/normalization/beta/OperatorOrNormalizeArgumentsB.dhallb
D test/normalization/beta/OperatorOrRhsFalseA.dhallb
D test/normalization/beta/OperatorOrRhsFalseB.dhallb
D test/normalization/beta/OperatorOrRhsTrueA.dhallb
D test/normalization/beta/OperatorOrRhsTrueB.dhallb
D test/normalization/beta/OperatorPlusLhsZeroA.dhallb
D test/normalization/beta/OperatorPlusLhsZeroB.dhallb
D test/normalization/beta/OperatorPlusNormalizeArgumentsA.dhallb
D test/normalization/beta/OperatorPlusNormalizeArgumentsB.dhallb
D test/normalization/beta/OperatorPlusOneAndOneA.dhallb
D test/normalization/beta/OperatorPlusOneAndOneB.dhallb
D test/normalization/beta/OperatorPlusRhsZeroA.dhallb
D test/normalization/beta/OperatorPlusRhsZeroB.dhallb
D test/normalization/beta/OperatorTextConcatenateLhsEmptyA.dhallb
D test/normalization/beta/OperatorTextConcatenateLhsEmptyB.dhallb
D test/normalization/beta/OperatorTextConcatenateNormalizeArgumentsA.dhallb
D test/normalization/beta/OperatorTextConcatenateNormalizeArgumentsB.dhallb
D test/normalization/beta/OperatorTextConcatenateRhsEmptyA.dhallb
D test/normalization/beta/OperatorTextConcatenateRhsEmptyB.dhallb
D test/normalization/beta/OperatorTextConcatenateTextTextA.dhallb
D test/normalization/beta/OperatorTextConcatenateTextTextB.dhallb
D test/normalization/beta/OperatorTimesLhsOneA.dhallb
D test/normalization/beta/OperatorTimesLhsOneB.dhallb
D test/normalization/beta/OperatorTimesLhsZeroA.dhallb
D test/normalization/beta/OperatorTimesLhsZeroB.dhallb
D test/normalization/beta/OperatorTimesNormalizeArgumentsA.dhallb
D test/normalization/beta/OperatorTimesNormalizeArgumentsB.dhallb
D test/normalization/beta/OperatorTimesRhsOneA.dhallb
D test/normalization/beta/OperatorTimesRhsOneB.dhallb
D test/normalization/beta/OperatorTimesRhsZeroA.dhallb
D test/normalization/beta/OperatorTimesRhsZeroB.dhallb
D test/normalization/beta/OperatorTimesTwoAndTwoA.dhallb
D test/normalization/beta/OperatorTimesTwoAndTwoB.dhallb
D test/normalization/beta/OptionalA.dhallb
D test/normalization/beta/OptionalB.dhallb
D test/normalization/beta/OptionalBuildA.dhallb
D test/normalization/beta/OptionalBuildB.dhallb
D test/normalization/beta/OptionalBuildFoldFusionA.dhallb
D test/normalization/beta/OptionalBuildFoldFusionB.dhallb
D test/normalization/beta/OptionalBuildImplementationA.dhallb
D test/normalization/beta/OptionalBuildImplementationB.dhallb
D test/normalization/beta/OptionalFoldA.dhallb
D test/normalization/beta/OptionalFoldB.dhallb
D test/normalization/beta/OptionalFoldNoneA.dhallb
D test/normalization/beta/OptionalFoldNoneB.dhallb
D test/normalization/beta/OptionalFoldSomeA.dhallb
D test/normalization/beta/OptionalFoldSomeB.dhallb
D test/normalization/beta/RecordA.dhallb
D test/normalization/beta/RecordB.dhallb
D test/normalization/beta/RecordEmptyA.dhallb
D test/normalization/beta/RecordEmptyB.dhallb
D test/normalization/beta/RecordProjectionA.dhallb
D test/normalization/beta/RecordProjectionB.dhallb
D test/normalization/beta/RecordProjectionEmptyA.dhallb
D test/normalization/beta/RecordProjectionEmptyB.dhallb
D test/normalization/beta/RecordProjectionNormalizeArgumentsA.dhallb
D test/normalization/beta/RecordProjectionNormalizeArgumentsB.dhallb
D test/normalization/beta/RecordSelectionA.dhallb
D test/normalization/beta/RecordSelectionB.dhallb
D test/normalization/beta/RecordSelectionNormalizeArgumentsA.dhallb
D test/normalization/beta/RecordSelectionNormalizeArgumentsB.dhallb
D test/normalization/beta/RecordTypeA.dhallb
D test/normalization/beta/RecordTypeB.dhallb
D test/normalization/beta/RecordTypeEmptyA.dhallb
D test/normalization/beta/RecordTypeEmptyB.dhallb
D test/normalization/beta/RecursiveRecordMergeCollisionA.dhallb
D test/normalization/beta/RecursiveRecordMergeCollisionB.dhallb
D test/normalization/beta/RecursiveRecordMergeLhsEmptyA.dhallb
D test/normalization/beta/RecursiveRecordMergeLhsEmptyB.dhallb
D test/normalization/beta/RecursiveRecordMergeNoCollisionA.dhallb
D test/normalization/beta/RecursiveRecordMergeNoCollisionB.dhallb
D test/normalization/beta/RecursiveRecordMergeNormalizeArgumentsA.dhallb
D test/normalization/beta/RecursiveRecordMergeNormalizeArgumentsB.dhallb
D test/normalization/beta/RecursiveRecordMergeRhsEmptyA.dhallb
D test/normalization/beta/RecursiveRecordMergeRhsEmptyB.dhallb
D test/normalization/beta/RecursiveRecordTypeMergeCollisionA.dhallb
D test/normalization/beta/RecursiveRecordTypeMergeCollisionB.dhallb
D test/normalization/beta/RecursiveRecordTypeMergeLhsEmptyA.dhallb
D test/normalization/beta/RecursiveRecordTypeMergeLhsEmptyB.dhallb
D test/normalization/beta/RecursiveRecordTypeMergeNoCollisionA.dhallb
D test/normalization/beta/RecursiveRecordTypeMergeNoCollisionB.dhallb
D test/normalization/beta/RecursiveRecordTypeMergeNormalizeArgumentsA.dhallb
D test/normalization/beta/RecursiveRecordTypeMergeNormalizeArgumentsB.dhallb
D test/normalization/beta/RecursiveRecordTypeMergeRhsEmptyA.dhallb
D test/normalization/beta/RecursiveRecordTypeMergeRhsEmptyB.dhallb
D test/normalization/beta/RightBiasedRecordMergeCollisionA.dhallb
D test/normalization/beta/RightBiasedRecordMergeCollisionB.dhallb
D test/normalization/beta/RightBiasedRecordMergeLhsEmptyA.dhallb
D test/normalization/beta/RightBiasedRecordMergeLhsEmptyB.dhallb
D test/normalization/beta/RightBiasedRecordMergeNoCollisionA.dhallb
D test/normalization/beta/RightBiasedRecordMergeNoCollisionB.dhallb
D test/normalization/beta/RightBiasedRecordMergeNormalizeArgumentsA.dhallb
D test/normalization/beta/RightBiasedRecordMergeNormalizeArgumentsB.dhallb
D test/normalization/beta/RightBiasedRecordMergeRhsEmptyA.dhallb
D test/normalization/beta/RightBiasedRecordMergeRhsEmptyB.dhallb
D test/normalization/beta/SomeNormalizeArgumentsA.dhallb
D test/normalization/beta/SomeNormalizeArgumentsB.dhallb
D test/normalization/beta/SortA.dhallb
D test/normalization/beta/SortB.dhallb
D test/normalization/beta/TextA.dhallb
D test/normalization/beta/TextB.dhallb
D test/normalization/beta/TextInterpolateA.dhallb
D test/normalization/beta/TextInterpolateB.dhallb
D test/normalization/beta/TextLiteralA.dhallb
D test/normalization/beta/TextLiteralB.dhallb
D test/normalization/beta/TextNormalizeInterpolationsA.dhallb
D test/normalization/beta/TextNormalizeInterpolationsB.dhallb
D test/normalization/beta/TextShowA.dhallb
D test/normalization/beta/TextShowAllEscapesA.dhallb
D test/normalization/beta/TextShowAllEscapesB.dhallb
D test/normalization/beta/TextShowB.dhallb
D test/normalization/beta/TrueA.dhallb
D test/normalization/beta/TrueB.dhallb
D test/normalization/beta/TypeA.dhallb
D test/normalization/beta/TypeAnnotationA.dhallb
D test/normalization/beta/TypeAnnotationB.dhallb
D test/normalization/beta/TypeB.dhallb
D test/normalization/beta/UnionNormalizeAlternativesA.dhallb
D test/normalization/beta/UnionNormalizeAlternativesB.dhallb
D test/normalization/beta/UnionNormalizeArgumentsA.dhallb
D test/normalization/beta/UnionNormalizeArgumentsB.dhallb
D test/normalization/beta/UnionProjectConstructorA.dhallb
D test/normalization/beta/UnionProjectConstructorB.dhallb
D test/normalization/beta/UnionProjectConstructorNormalizeArgumentsA.dhallb
D test/normalization/beta/UnionProjectConstructorNormalizeArgumentsB.dhallb
D test/normalization/beta/UnionSortAlternativesA.dhallb
D test/normalization/beta/UnionSortAlternativesB.dhallb
D test/normalization/beta/UnionTypeA.dhallb
D test/normalization/beta/UnionTypeB.dhallb
D test/normalization/beta/UnionTypeEmptyA.dhallb
D test/normalization/beta/UnionTypeEmptyB.dhallb
D test/normalization/beta/UnionTypeNormalizeArgumentsA.dhallb
D test/normalization/beta/UnionTypeNormalizeArgumentsB.dhallb
D test/normalization/beta/VariableA.dhallb
D test/normalization/beta/VariableB.dhallb
D test/normalization/dhall-encode
D test/normalization/dhall-hash
D test/normalization/gen
D test/normalization/standard/.gitignore
M test/test_as_json.rb
M test/test_binary.rb
M test/test_normalization.rb
A test/test_parser.rb
M test/test_resolvers.rb
M test/test_suite.rb
M .builds.dhall/debian-stable.dhall => .builds.dhall/debian-stable.dhall +1 -5
@@ 14,13 14,9 @@
{ build =
''
cd dhall-ruby
- wget https://github.com/dhall-lang/dhall-haskell/releases/download/1.21.0/dhall-1.21.0-x86_64-linux.tar.bz2
- tar -xvf dhall-1.21.0-x86_64-linux.tar.bz2
- export PATH="$(pwd)/bin:$PATH"
- test/normalization/gen
rubocop
bundle install --path="../.gems"
- bundle exec ruby -Ilib test/test_suite.rb
+ make test
''
}
]
M .builds/debian-stable.yml => .builds/debian-stable.yml +1 -5
@@ 4,13 4,9 @@ sources:
tasks:
- build: |
cd dhall-ruby
- wget https://github.com/dhall-lang/dhall-haskell/releases/download/1.21.0/dhall-1.21.0-x86_64-linux.tar.bz2
- tar -xvf dhall-1.21.0-x86_64-linux.tar.bz2
- export PATH="$(pwd)/bin:$PATH"
- test/normalization/gen
rubocop
bundle install --path="../.gems"
- bundle exec ruby -Ilib test/test_suite.rb
+ make test
packages:
- bundler
- git-extras
A .gitignore => .gitignore +4 -0
@@ 0,0 1,4 @@
+lib/dhall/parser.citrus
+Gemfile.lock
+.bundle/*
+.gems/*
M Gemfile => Gemfile +2 -0
@@ 2,7 2,9 @@
source "https://rubygems.org"
+gem "abnf"
gem "cbor"
+gem "citrus"
gem "promise.rb"
gem "value_semantics"
gem "webmock"
A Makefile => Makefile +7 -0
@@ 0,0 1,7 @@
+.PHONY: test
+
+lib/dhall/parser.citrus: dhall-lang/standard/dhall.abnf
+ bundle exec ruby -Ilib scripts/generate_citrus_parser.rb < $< > $@
+
+test: lib/dhall/parser.citrus
+ bundle exec ruby -Ilib test/test_suite.rb
M dhall-lang => dhall-lang +1 -1
@@ 1,1 1,1 @@
-Subproject commit c21b3f5c8b19997816b6ceae87709db3c5afb150
+Subproject commit 30841349fd02fd4eb965cba23a8dc557e99fbd15
M lib/dhall.rb => lib/dhall.rb +1 -0
@@ 2,6 2,7 @@
require "dhall/ast"
require "dhall/builtins"
+require "dhall/parser"
require "dhall/binary"
require "dhall/normalize"
require "dhall/resolve"
M lib/dhall/ast.rb => lib/dhall/ast.rb +131 -70
@@ 4,7 4,6 @@ require "uri"
require "value_semantics"
require "dhall/util"
-require "dhall/visitor"
module Dhall
class Expression
@@ 111,6 110,16 @@ module Dhall
argument Expression
end)
+ def self.for(function:, argument:)
+ if function == Variable["Some"]
+ Optional.new(value: argument)
+ elsif function == Variable["None"]
+ OptionalNone.new(value_type: argument)
+ else
+ new(function: function, argument: argument)
+ end
+ end
+
def flatten
f, args = if function.is_a?(Application)
function.flatten
@@ 132,7 141,7 @@ module Dhall
class Function < Expression
include(ValueSemantics.for_attributes do
- var ::String
+ var Util::AllOf.new(::String, Util::Not.new(Util::BuiltinName))
type Either(nil, Expression) # nil is not allowed in proper Dhall
body Expression
end)
@@ 630,7 639,7 @@ module Dhall
class UnionType < Expression
include(ValueSemantics.for_attributes do
- alternatives Util::HashOf.new(::String, Expression)
+ alternatives Util::HashOf.new(::String, Either(Expression, nil))
end)
def record
@@ 650,11 659,15 @@ module Dhall
end
def fetch(k, default=nil)
- Function.new(
- var: k,
- type: alternatives.fetch(k),
- body: Union.from(self, k, Variable[k])
- ).normalize
+ if (type = alternatives.fetch(k))
+ Function.new(
+ var: k,
+ type: type,
+ body: Union.from(self, k, Variable[k])
+ ).normalize
+ else
+ Union.from(self, k, nil)
+ end
rescue KeyError
block_given? ? yield : (default || raise)
end
@@ 666,21 679,21 @@ module Dhall
end
def as_json
- [11, Hash[alternatives.to_a.map { |k, v| [k, v.as_json] }.sort]]
+ [11, Hash[alternatives.to_a.map { |k, v| [k, v&.as_json] }.sort]]
end
end
class Union < Expression
include(ValueSemantics.for_attributes do
tag ::String
- value Expression
+ value Either(Expression, nil)
alternatives UnionType
end)
def self.from(alts, tag, value)
new(
tag: tag,
- value: TypeAnnotation.new(
+ value: value && TypeAnnotation.new(
value: value,
type: alts.alternatives[tag]
),
@@ 707,10 720,7 @@ module Dhall
end
end
- class Number < Expression
- end
-
- class Natural < Number
+ class Natural < Expression
include(ValueSemantics.for_attributes do
value (0..Float::INFINITY)
end)
@@ 757,7 767,7 @@ module Dhall
end
end
- class Integer < Number
+ class Integer < Expression
include(ValueSemantics.for_attributes do
value ::Integer
end)
@@ 771,7 781,7 @@ module Dhall
end
end
- class Double < Number
+ class Double < Expression
include(ValueSemantics.for_attributes do
value ::Float
end)
@@ 780,16 790,25 @@ module Dhall
value.to_s
end
+ def to_f
+ value
+ end
+
+ def coerce(other)
+ return [other, self] if other.is_a?(Double)
+ [Double.new(value: other.to_f), self]
+ end
+
def single?
[value].pack("g").unpack("g").first == value
end
def as_json
- value
+ self
end
- def as_cbor
- self
+ def to_json
+ value.to_json
end
def to_cbor(packer=nil)
@@ 810,7 829,7 @@ module Dhall
class Text < Expression
include(ValueSemantics.for_attributes do
- value ::String
+ value ::String, coerce: ->(s) { s.encode("utf-8") }
end)
def <<(other)
@@ 832,30 851,58 @@ module Dhall
class TextLiteral < Expression
include(ValueSemantics.for_attributes do
- chunks ArrayOf(Expression)
+ chunks Util::ArrayOf.new(Expression, min: 3)
end)
+ def self.for(*chunks)
+ fixed =
+ chunks
+ .flat_map { |c| ["", c, ""] }
+ .map { |c| c.is_a?(Expression) ? c : Text.new(value: c.to_s) }
+ .chunk { |x| x.is_a?(Text) }.flat_map do |(is_text, group)|
+ is_text ? group.reduce(&:<<) : group
+ end
+
+ return Text.new(value: "") if fixed.empty?
+ fixed.length == 1 ? fixed.first : new(chunks: fixed)
+ end
+
def as_json
- raise "TextLiteral must start with a Text" unless chunks.first.is_a?(Text)
[18, *chunks.map { |chunk| chunk.is_a?(Text) ? chunk.value : chunk.as_json }]
end
end
class Import < Expression
- def initialize(integrity_check, import_type, path)
- @integrity_check = integrity_check
- @import_type = import_type
- @path = path
- end
+ class IntegrityCheck
+ include(ValueSemantics.for_attributes do
+ protocol Either("sha256", :nocheck)
+ data Either(::String, nil)
+ end)
- def as_json
- [
- 24,
- @integrity_check&.as_json,
- IMPORT_TYPES.index(@import_type),
- PATH_TYPES.index(@path.class),
- *@path.as_json
- ]
+ class FailureException < StandardError; end
+
+ def initialize(protocol=:nocheck, data=nil)
+ super(
+ protocol: protocol,
+ data: data
+ )
+ end
+
+ def to_s
+ "#{@protocol}:#{@data}"
+ end
+
+ def check(expr)
+ if @protocol != :nocheck && expr.cache_key != to_s
+ raise FailureException, "#{expr} does not match #{self}"
+ end
+
+ expr
+ end
+
+ def as_json
+ @protocol == :nocheck ? nil : [@protocol, @data]
+ end
end
class URI
@@ 864,7 911,6 @@ module Dhall
authority ::String
path ArrayOf(::String)
query Either(nil, ::String)
- fragment Either(nil, ::String)
end)
HeaderType = RecordType.new(
@@ 874,13 920,12 @@ module Dhall
}
)
- def initialize(headers, authority, *path, query, fragment)
+ def initialize(headers, authority, *path, query)
super(
headers: headers,
authority: authority,
path: path,
query: query,
- fragment: fragment
)
end
@@ 890,7 935,6 @@ module Dhall
authority,
*path,
query,
- fragment
)
end
@@ 913,7 957,7 @@ module Dhall
end
def as_json
- [@headers.as_json, authority, *path, query, fragment]
+ [@headers&.as_json, authority, *path, query]
end
end
@@ 976,7 1020,7 @@ module Dhall
end
def to_uri(scheme, authority)
- scheme.new(nil, authority, *path, nil, nil)
+ scheme.new(nil, authority, *path, nil)
end
end
@@ 999,6 1043,18 @@ module Dhall
end
class EnvironmentVariable
+ ESCAPES = {
+ "\"" => "\"",
+ "\\" => "\\",
+ "a" => "\a",
+ "b" => "\b",
+ "f" => "\f",
+ "n" => "\n",
+ "r" => "\r",
+ "t" => "\t",
+ "v" => "\v"
+ }.freeze
+
def initialize(var)
@var = var
end
@@ 1017,7 1073,9 @@ module Dhall
end
def as_json
- var
+ @var.gsub(/[\"\\\a\b\f\n\r\t\v]/) do |c|
+ "\\" + ESCAPES.find { |(_, v)| v == c }.first
+ end
end
end
@@ 1031,31 1089,6 @@ module Dhall
end
end
- class IntegrityCheck
- class FailureException < StandardError; end
-
- def initialize(protocol=:nocheck, data=nil)
- @protocol = protocol
- @data = data
- end
-
- def to_s
- "#{@protocol}:#{@data}"
- end
-
- def check(expr)
- if @protocol != :nocheck && expr.cache_key != to_s
- raise FailureException, "#{expr} does not match #{self}"
- end
-
- expr
- end
-
- def as_json
- @protocol == :nocheck ? nil : [@protocol, @data]
- end
- end
-
class Expression
def self.call(import_value)
Dhall.from_binary(import_value)
@@ 1078,11 1111,35 @@ module Dhall
AbsolutePath, RelativePath, RelativeToParentPath, RelativeToHomePath,
EnvironmentVariable, MissingImport
].freeze
+
+ include(ValueSemantics.for_attributes do
+ integrity_check IntegrityCheck, default: IntegrityCheck.new
+ import_type Class
+ path Either(*PATH_TYPES)
+ end)
+
+ def initialize(integrity_check, import_type, path)
+ super(
+ integrity_check: integrity_check || IntegrityCheck.new,
+ import_type: import_type,
+ path: path
+ )
+ end
+
+ def as_json
+ [
+ 24,
+ integrity_check&.as_json,
+ IMPORT_TYPES.index(import_type),
+ PATH_TYPES.index(path.class),
+ *path.as_json
+ ]
+ end
end
class Let < Expression
include(ValueSemantics.for_attributes do
- var ::String
+ var Util::AllOf.new(::String, Util::Not.new(Util::BuiltinName))
assign Expression
type Either(nil, Expression)
end)
@@ 1115,11 1172,15 @@ module Dhall
let.assign.shift(1, let.var, 0)
).shift(-1, let.var, 0)
end
+
+ def as_json
+ [25, *let.as_json, body.as_json]
+ end
end
class LetBlock < Expression
include(ValueSemantics.for_attributes do
- lets ArrayOf(Let)
+ lets Util::ArrayOf.new(Let, min: 2)
body Expression
end)
M lib/dhall/binary.rb => lib/dhall/binary.rb +26 -17
@@ 27,14 27,10 @@ module Dhall
end
def to_cbor(io=nil)
- CBOR.encode(as_cbor, io)
+ CBOR.encode(as_json, io)
end
alias to_binary to_cbor
- def as_cbor
- as_json
- end
-
def digest(digest: Digest::SHA2.new(256))
(digest << normalize.to_binary).freeze
end
@@ 48,7 44,7 @@ module Dhall
def self.decode(function, *args)
function = Dhall.decode(function)
args.map(&Dhall.method(:decode)).reduce(function) do |f, arg|
- new(function: f, argument: arg)
+ self.for(function: f, argument: arg)
end
end
end
@@ 149,7 145,9 @@ module Dhall
class UnionType
def self.decode(record)
- new(alternatives: Hash[record.map { |k, v| [k, Dhall.decode(v)] }])
+ new(alternatives: Hash[record.map { |k, v|
+ [k, v.nil? ? v : Dhall.decode(v)]
+ }])
end
end
@@ 189,6 187,13 @@ module Dhall
class Import
def self.decode(integrity_check, import_type, path_type, *parts)
parts[0] = Dhall.decode(parts[0]) if path_type < 2 && !parts[0].nil?
+ if PATH_TYPES[path_type] == EnvironmentVariable
+ parts = parts.map do |part|
+ part.gsub(/\\[\"\\abfnrtv]/) do |escape|
+ EnvironmentVariable::ESCAPES.fetch(escape[1])
+ end
+ end
+ end
new(
IntegrityCheck.new(*integrity_check),
@@ 200,16 205,20 @@ module Dhall
class LetBlock
def self.decode(*parts)
- new(
- body: Dhall.decode(parts.pop),
- lets: parts.each_slice(3).map do |(var, type, assign)|
- Let.new(
- var: var,
- assign: Dhall.decode(assign),
- type: type.nil? ? nil : Dhall.decode(type)
- )
- end
- )
+ body = Dhall.decode(parts.pop)
+ lets = parts.each_slice(3).map do |(var, type, assign)|
+ Let.new(
+ var: var,
+ assign: Dhall.decode(assign),
+ type: type.nil? ? nil : Dhall.decode(type)
+ )
+ end
+
+ if lets.length == 1
+ LetIn.new(let: lets.first, body: body)
+ else
+ new(lets: lets, body: body)
+ end
end
end
M lib/dhall/normalize.rb => lib/dhall/normalize.rb +13 -16
@@ 12,8 12,11 @@ module Dhall
Util::ArrayOf.new(Expression) => lambda do |x|
x.map(&block)
end,
- Util::HashOf.new(ValueSemantics::Anything, Expression) => lambda do |x|
- Hash[x.map { |k, v| [k, block[v]] }]
+ Util::HashOf.new(
+ ValueSemantics::Anything,
+ ValueSemantics::Either.new([Expression, nil])
+ ) => lambda do |x|
+ Hash[x.map { |k, v| [k, v.nil? ? v : block[v]] }]
end
)
end
@@ 263,9 266,13 @@ module Dhall
def normalize
normalized = super
if normalized.record.is_a?(Record) && normalized.input.is_a?(Union)
- normalized.record.fetch(normalized.input.tag).call(
- normalized.input.value
- )
+ if normalized.input.value.nil?
+ normalized.record.fetch(normalized.input.tag)
+ else
+ normalized.record.fetch(normalized.input.tag).call(
+ normalized.input.value
+ )
+ end
else
normalized
end
@@ 331,17 338,7 @@ module Dhall
class TextLiteral
def normalize
- chunks =
- super
- .flatten.chunks.chunk { |x| x.is_a?(Text) }.flat_map do |(_, group)|
- if group.first.is_a?(Text)
- [Text.new(value: group.map(&:value).join)]
- else
- group
- end
- end
-
- chunks.length == 1 ? chunks.first : with(chunks: chunks)
+ TextLiteral.for(*super.flatten.chunks)
end
def flatten
A lib/dhall/parser.rb => lib/dhall/parser.rb +530 -0
@@ 0,0 1,530 @@
+# frozen_string_literal: true
+
+require "dhall/ast"
+require "dhall/builtins"
+
+module Dhall
+ module Parser
+ def self.parse(*args)
+ CitrusParser.parse(*args)
+ end
+
+ def self.parse_file(*args)
+ CitrusParser.parse_file(*args)
+ end
+
+ module CompleteExpression
+ def value
+ capture(:expression).value
+ end
+ end
+
+ def self.operator_expression(capture, ast_class)
+ Module.new do
+ define_method(:value) do
+ captures(capture).map(&:value).reduce do |lhs, rhs|
+ Operator.const_get(ast_class).new(lhs: lhs, rhs: rhs)
+ end
+ end
+ end
+ end
+
+ ImportAltExpression = operator_expression(:or_expression, :ImportFallback)
+ OrExpression = operator_expression(:plus_expression, :Or)
+ PlusExpression = operator_expression(:text_append_expression, :Plus)
+ TextAppendExpression = operator_expression(:list_append_expression, :TextConcatenate)
+ ListAppendExpression = operator_expression(:and_expression, :ListConcatenate)
+ AndExpression = operator_expression(:combine_expression, :And)
+ CombineExpression = operator_expression(:prefer_expression, :RecursiveRecordMerge)
+ PreferExpression = operator_expression(:combine_types_expression, :RightBiasedRecordMerge)
+ CombineTypesExpression = operator_expression(:times_expression, :RecursiveRecordTypeMerge)
+ TimesExpression = operator_expression(:equal_expression, :Times)
+ EqualExpression = operator_expression(:not_equal_expression, :Equal)
+ NotEqualExpression = operator_expression(:application_expression, :NotEqual)
+
+ module ApplicationExpression
+ def value
+ some = capture(:some) ? [Variable["Some"]] : []
+ els = some + captures(:import_expression).map(&:value)
+ els.reduce do |f, arg|
+ Application.for(function: f, argument: arg)
+ end
+ end
+ end
+
+ module SelectorExpression
+ def value
+ record = first.value
+ selectors = matches[1].matches
+ selectors.reduce(record) do |rec, sel|
+ if sel.captures.key?(:labels)
+ sels = sel.capture(:labels).captures(:any_label).map(&:value)
+ return EmptyRecordProjection.new(record: rec) if sels.empty?
+ RecordProjection.new(record: rec, selectors: sels)
+ else
+ RecordSelection.new(
+ record: rec,
+ selector: sel.capture(:any_label).value
+ )
+ end
+ end
+ end
+ end
+
+ module Label
+ def value
+ if first.string == "`"
+ matches[1].string
+ else
+ string
+ end
+ end
+ end
+
+ module NonreservedLabel
+ def value
+ if captures.key?(:label)
+ capture(:label).value
+ else
+ string
+ end
+ end
+ end
+
+ module NaturalLiteral
+ def value
+ Natural.new(value: string.to_i)
+ end
+ end
+
+ module IntegerLiteral
+ def value
+ Integer.new(value: string.to_i)
+ end
+ end
+
+ module DoubleLiteral
+ def value
+ key = captures.keys.select { |k| k.is_a?(Symbol) }.first
+ Double.new(value: case key
+ when :infinity
+ string == "-Infinity" ? -Float::INFINITY : Float::INFINITY
+ when :nan
+ Float::NAN
+ else
+ float = string.to_f
+ if float.nan? || float.infinite?
+ raise Citrus::ParseError, input
+ end
+ float
+ end
+ )
+ end
+ end
+
+ module DoubleQuoteLiteral
+ def value
+ TextLiteral.for(
+ *captures(:double_quote_chunk)
+ .map(&:value)
+ .chunk { |s| s.is_a?(String) }
+ .flat_map { |(is_string, group)|
+ is_string ? group.join : group
+ }
+ )
+ end
+ end
+
+ module DoubleQuoteChunk
+ ESCAPES = {
+ "\"" => "\"",
+ "$" => "$",
+ "\\" => "\\",
+ "/" => "/",
+ "b" => "\b",
+ "f" => "\f",
+ "n" => "\n",
+ "r" => "\r",
+ "t" => "\t"
+ }.freeze
+
+ def value
+ if first&.string == "\\" && matches[1].string =~ /\Au\h+\Z/i
+ [matches[1].string[1..-1]].pack("H*").force_encoding("UTF-16BE")
+ elsif first&.string == "\\"
+ ESCAPES.fetch(matches[1].string) do
+ raise "Invalid escape: #{string}"
+ end.encode("UTF-16BE")
+ elsif first&.string == "${"
+ matches[1].value
+ else
+ string.encode("UTF-16BE")
+ end
+ end
+ end
+
+ module SingleQuoteLiteral
+ def value
+ chunks = capture(:single_quote_continue).value.flatten
+ indent = chunks.join.split(/\n/, -1).map { |line|
+ line.match(/^( *|\t*)/).to_s.length
+ }.min
+
+ TextLiteral.for(
+ *chunks
+ .chunk { |c| c != "\n" }
+ .flat_map { |(line, chunk)| line ? chunk[indent..-1] : chunk }
+ )
+ end
+ end
+
+ module SingleQuoteContinue
+ ESCAPES = {
+ "'''" => "''",
+ "''${" => "${"
+ }.freeze
+
+ def value
+ if matches.length == 2
+ [ESCAPES.fetch(first.string, first.string), matches[1].value]
+ elsif matches.length == 0
+ []
+ else
+ [
+ capture(:complete_expression).value,
+ capture(:single_quote_continue).value
+ ]
+ end
+ end
+ end
+
+ module NonEmptyListLiteral
+ def value
+ List.new(elements: captures(:expression).map(&:value))
+ end
+ end
+
+ module Identifier
+ def value
+ name = capture(:any_label).value
+
+ return Dhall::Bool.new(value: true) if name == "True"
+ return Dhall::Bool.new(value: false) if name == "False"
+
+ Dhall::Builtins::ALL[name]&.new ||
+ Variable.new(
+ name: name,
+ index: capture(:natural_literal)&.string.to_i
+ )
+ end
+ end
+
+ module PrimitiveExpression
+ def value
+ if first&.string == "("
+ capture(:expression).value
+ elsif first&.string == "{"
+ capture(:record_type_or_literal).value
+ elsif first&.string == "<"
+ capture(:union_type_or_literal).value
+ else
+ super
+ end
+ end
+ end
+
+ module UnionTypeOrLiteral
+ def value
+ if captures[0].string == ""
+ UnionType.new(alternatives: {})
+ else
+ super
+ end
+ end
+ end
+
+ module NonEmptyUnionTypeOrLiteral
+ def value
+ cont = matches[1].first
+
+ if cont && cont.matches[1].first.string == "="
+ Union.new(
+ tag: captures(:any_label).first.value,
+ value: captures(:expression).first.value,
+ alternatives: UnionType.new(alternatives: ::Hash[
+ captures(:any_label)[1..-1].map(&:value).zip(
+ captures(:expression)[1..-1].map(&:value)
+ )
+ ])
+ )
+ else
+ type = UnionType.new(alternatives: ::Hash[
+ captures(:any_label).map(&:value).zip(
+ captures(:expression).map(&:value)
+ )
+ ])
+ rest = cont && cont.matches[1].capture(:non_empty_union_type_or_literal)&.value
+ if rest.is_a?(Union)
+ rest.with(alternatives: type.merge(rest.alternatives))
+ elsif rest
+ type.merge(rest)
+ else
+ type
+ end
+ end
+ end
+ end
+
+ module RecordTypeOrLiteral
+ def value
+ if captures[0].string == "="
+ EmptyRecord.new
+ elsif captures[0].string == ""
+ EmptyRecordType.new
+ else
+ super
+ end
+ end
+ end
+
+ module NonEmptyRecordTypeOrLiteral
+ def value
+ if captures.key?(:non_empty_record_literal)
+ capture(:non_empty_record_literal).value(
+ capture(:any_label).value
+ )
+ else
+ capture(:non_empty_record_type).value(
+ capture(:any_label).value
+ )
+ end
+ end
+ end
+
+ module NonEmptyRecordLiteral
+ def value(first_key)
+ keys = [first_key] + captures(:any_label).map(&:value)
+ values = captures(:expression).map(&:value)
+ Record.new(record: ::Hash[keys.zip(values)])
+ end
+ end
+
+ module NonEmptyRecordType
+ def value(first_key)
+ keys = [first_key] + captures(:any_label).map(&:value)
+ values = captures(:expression).map(&:value)
+ RecordType.new(record: ::Hash[keys.zip(values)])
+ end
+ end
+
+ module EmptyCollection
+ def value
+ if captures.key?(:list)
+ EmptyList.new(element_type: capture(:import_expression).value)
+ else
+ OptionalNone.new(value_type: capture(:import_expression).value)
+ end
+ end
+ end
+
+ module NonEmptyOptional
+ def value
+ Optional.new(
+ value: capture(:expression).value,
+ value_type: capture(:import_expression).value
+ )
+ end
+ end
+
+ module AnnotatedExpression
+ def value
+ if captures.key?(:empty_collection)
+ capture(:empty_collection).value
+ elsif captures.key?(:non_empty_optional)
+ capture(:non_empty_optional).value
+ elsif matches.length == 2
+ TypeAnnotation.new(
+ value: first.value,
+ type: matches[1].capture(:expression).value
+ )
+ else
+ super
+ end
+ end
+ end
+
+ module Expression
+ def value
+ keys = captures.keys.select { |k| k.is_a?(Symbol) }
+ if keys.length == 1
+ capture(keys.first).value
+ elsif captures.key?(:let)
+ lets = first.matches.map { |let_match|
+ exprs = let_match.captures(:expression)
+ Let.new(
+ var: let_match.capture(:nonreserved_label).value,
+ assign: exprs.last.value,
+ type: exprs.length > 1 ? exprs.first.value : nil,
+ )
+ }
+
+ if lets.length == 1
+ LetIn.new(let: lets.first, body: matches.last.value)
+ else
+ LetBlock.new(lets: lets, body: matches.last.value)
+ end
+ elsif captures.key?(:lambda)
+ Function.new(
+ var: capture(:nonreserved_label).value,
+ type: captures(:expression)[0].value,
+ body: captures(:expression)[1].value
+ )
+ elsif captures.key?(:forall)
+ Forall.new(
+ var: capture(:nonreserved_label).value,
+ type: captures(:expression)[0].value,
+ body: captures(:expression)[1].value
+ )
+ elsif captures.key?(:arrow)
+ Forall.of_arguments(
+ capture(:operator_expression).value,
+ body: capture(:expression).value
+ )
+ elsif captures.key?(:if)
+ If.new(
+ predicate: captures(:expression)[0].value,
+ then: captures(:expression)[1].value,
+ else: captures(:expression)[2].value,
+ )
+ elsif captures.key?(:merge)
+ Merge.new(
+ record: captures(:import_expression)[0].value,
+ input: captures(:import_expression)[1].value,
+ type: capture(:application_expression)&.value
+ )
+ else
+ super
+ end
+ end
+ end
+
+ module Import
+ def value
+ import_type = if captures.key?(:text)
+ Dhall::Import::Text
+ else
+ Dhall::Import::Expression
+ end
+
+ capture(:import_hashed).value(import_type)
+ end
+ end
+
+ module ImportHashed
+ def value(import_type)
+ integrity_check = capture(:hash)&.value
+ path = capture(:import_type).value
+ Dhall::Import.new(integrity_check, import_type, path)
+ end
+ end
+
+ module Hash
+ def value
+ protocol, data = string.split(/:/, 2)
+ Dhall::Import::IntegrityCheck.new(protocol, data)
+ end
+ end
+
+ module Http
+ SCHEME = {
+ "http" => Dhall::Import::Http,
+ "https" => Dhall::Import::Https,
+ }.freeze
+
+ def self.escape(s)
+ URI.encode_www_form_component(s).gsub("+", "%20")
+ end
+
+ def value
+ http = capture(:http_raw)
+ SCHEME.fetch(http.capture(:scheme).value).new(
+ if captures.key?(:import_hashed)
+ capture(:import_hashed).value(Dhall::Import::Expression)
+ end,
+ http.capture(:authority).value,
+ *http.capture(:path).captures(:path_component).map { |c|
+ # https://github.com/dhall-lang/dhall-lang/issues/456
+ c.value # (Http.method(:escape))
+ },
+ http.capture(:query)&.value
+ )
+ end
+ end
+
+ module Env
+ def value
+ Dhall::Import::EnvironmentVariable.new(
+ if captures.key?(:bash_environment_variable)
+ capture(:bash_environment_variable).string
+ else
+ capture(:posix_environment_variable).value.encode("utf-8")
+ end
+ )
+ end
+ end
+
+ module PosixEnvironmentVariable
+ def value
+ matches.map(&:value).join
+ end
+ end
+
+ module PosixEnvironmentVariableCharacter
+ ESCAPES = Dhall::Import::EnvironmentVariable::ESCAPES
+
+ def value
+ if first&.string == "\\"
+ ESCAPES.fetch(matches[1].string) do
+ raise "Invalid escape: #{string}"
+ end.encode("UTF-16BE")
+ else
+ string
+ end
+ end
+ end
+
+ module Local
+ KLASS = {
+ "/" => Dhall::Import::AbsolutePath,
+ "." => Dhall::Import::RelativePath,
+ ".." => Dhall::Import::RelativeToParentPath,
+ "~" => Dhall::Import::RelativeToHomePath
+ }.freeze
+
+ def value
+ path = capture(:path).captures(:path_component).map(&:value)
+ klass = KLASS.find { |prefix, _| string.start_with?(prefix) }.last
+ klass.new(*path)
+ end
+ end
+
+ module PathComponent
+ def value(escaper=:itself.to_proc)
+ if captures.key?(:quoted_path_character)
+ escaper.call(matches[1].matches[1].value)
+ else
+ matches[1].value
+ end
+ end
+ end
+
+ module Missing
+ def value
+ Dhall::Import::MissingImport.new
+ end
+ end
+ end
+end
+
+require "citrus"
+Citrus.require "dhall/parser"
M lib/dhall/util.rb => lib/dhall/util.rb +52 -0
@@ 51,6 51,58 @@ module Dhall
end
end
+ class Not
+ def initialize(validator)
+ @validator = validator
+ end
+
+ def ===(other)
+ !(@validator === other)
+ end
+ end
+
+ module BuiltinName
+ NAMES = [
+ "Natural/build",
+ "Natural/fold",
+ "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",
+ "Optional",
+ "Natural",
+ "Integer",
+ "Double",
+ "Text",
+ "List",
+ "True",
+ "False",
+ "None",
+ "Type",
+ "Kind",
+ "Sort"
+ ].freeze
+
+ def self.===(other)
+ NAMES.include?(other)
+ end
+ end
+
def self.match_results(xs=nil, ys=nil)
Array(xs).each_with_index.map do |r, idx|
yield r, ys[idx]
A scripts/generate_citrus_parser.rb => scripts/generate_citrus_parser.rb +166 -0
@@ 0,0 1,166 @@
+require "abnf"
+
+require "dhall/parser"
+require "dhall/util"
+
+class RegexpTree::CharClass
+ def encode_elt(e)
+ case e
+ when 0x09; '\t'
+ when 0x0a; '\n'
+ when 0x0d; '\r'
+ when 0x0c; '\f'
+ when 0x0b; '\v'
+ when 0x07; '\a'
+ when 0x1b; '\e'
+ when 0x21, 0x22, 0x25, 0x26, 0x27, 0x2c, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x2f, 0x30..0x39, 0x40, 0x41..0x5a, 0x5f, 0x60, 0x61..0x7a, 0x7e
+ sprintf("%c", e)
+ else
+ sprintf("\\u{%02x}", e)
+ end
+ end
+end
+
+class Sequence
+ attr_reader :seq
+
+ def initialize(*seq)
+ @seq = seq
+ end
+
+ def +(other)
+ if other.is_a?(Sequence)
+ self.class.new(*seq, *other.seq)
+ else
+ self.class.new(*seq, other)
+ end
+ end
+
+ def to_s
+ @seq.join(' ')
+ end
+end
+
+class Terminal
+ SAFE = /\A[\w_:']+\Z/
+
+ def initialize(regex)
+ @regex = regex
+ end
+
+ def +(other)
+ if options == other.options
+ self.class.new(Regexp.compile("#{source}#{other.source}", options))
+ else
+ Sequence.new(self, other)
+ end
+ end
+
+ def options
+ @regex.options
+ end
+
+ def source
+ if SAFE =~ @regex.source
+ @regex.source
+ else
+ "(?:#{@regex.source})"
+ end
+ end
+
+ def to_s
+ if SAFE =~ @regex.source
+ if @regex.casefold?
+ "`#{@regex.source}`"
+ else
+ @regex.source.inspect
+ end
+ else
+ @regex.inspect
+ end
+ end
+end
+
+class RuleFormatter
+ def initialize(abnf)
+ @abnf = abnf
+ @bogus = 0
+ end
+
+ def bogus_name
+ "____#{@bogus += 1}".intern
+ end
+
+ def format_anon_rule(rule)
+ name = bogus_name
+ @abnf[name] = rule
+ formatted = format_rule(name, rule)
+ formatted.is_a?(Terminal) ? formatted : "(#{formatted})"
+ end
+
+ def format_rule(name, rule)
+ if name == :"simple-label"
+ return "keyword simple_label_next_char+ | !keyword (simple_label_first_char simple_label_next_char*)"
+ end
+
+ if name == :"nonreserved-label"
+ return "reserved_identifier simple_label_next_char+ | !reserved_identifier label"
+ end
+
+ case rule
+ when ABNF::Term
+ Terminal.new(@abnf.regexp(name))
+ when ABNF::Var
+ rule.name.to_s.gsub(/-/, '_')
+ when ABNF::Seq
+ if rule.elts.empty?
+ '""'
+ else
+ rule.elts.map(&method(:format_anon_rule)).chunk { |x| x.is_a?(Terminal) }.flat_map { |(terminal, chunk)|
+ terminal ? chunk.reduce(:+) : Sequence.new(chunk)
+ }.join(' ')
+ end
+ when ABNF::Alt
+ rule.elts.map(&method(:format_anon_rule)).join(' | ')
+ when ABNF::Rep
+ base = format_anon_rule(rule.elt)
+ if rule.min == 0 && rule.max.nil?
+ "#{base}*"
+ elsif rule.min == 1 && rule.max.nil?
+ "#{base}+"
+ elsif rule.min == 0 && rule.max == 1
+ "#{base}?"
+ else
+ "#{base} #{rule.min}*#{rule.max}"
+ end
+ else
+ raise "Unknown rule type: #{rule.inspect}"
+ end
+
+ end
+end
+
+puts "grammar Dhall::Parser::CitrusParser"
+puts "\troot complete_expression"
+
+abnf = ABNF.parse(STDIN.read)
+formatter = RuleFormatter.new(abnf)
+abnf.each do |name, rule|
+ next if name.to_s.start_with?("____")
+ puts "rule #{name.to_s.gsub(/-/, '_')}"
+ print "\t(#{formatter.format_rule(name, rule)})"
+ extension = name.to_s.split(/-/).map(&:capitalize).join
+ if Dhall::Parser.const_defined?(extension)
+ puts " <Dhall::Parser::#{extension}>"
+ else
+ puts
+ end
+ puts "end"
+end
+
+puts "rule reserved_identifier"
+print "\t"
+puts Dhall::Util::BuiltinName::NAMES.map { |name| "\"#{name}\"" }.join(" |\n\t")
+puts "end"
+
+puts "end"
D test/normalization/alpha/FunctionBindingUnderscoreA.dhallb => test/normalization/alpha/FunctionBindingUnderscoreA.dhallb +0 -1
@@ 1,1 0,0 @@
-�aAab>
\ No newline at end of file
D test/normalization/alpha/FunctionBindingUnderscoreB.dhallb => test/normalization/alpha/FunctionBindingUnderscoreB.dhallb +0 -1
@@ 1,1 0,0 @@
-�aAab>
\ No newline at end of file
D test/normalization/alpha/FunctionBindingXA.dhallb => test/normalization/alpha/FunctionBindingXA.dhallb +0 -1
@@ 1,1 0,0 @@
-�axaAax>
\ No newline at end of file
D test/normalization/alpha/FunctionBindingXB.dhallb => test/normalization/alpha/FunctionBindingXB.dhallb +0 -0
D test/normalization/alpha/FunctionNestedBindingXA.dhallb => test/normalization/alpha/FunctionNestedBindingXA.dhallb +0 -1
@@ 1,1 0,0 @@
-�axaA�aBax>
\ No newline at end of file
D test/normalization/alpha/FunctionNestedBindingXB.dhallb => test/normalization/alpha/FunctionNestedBindingXB.dhallb +0 -1
@@ 1,1 0,0 @@
-�aA�aB>
\ No newline at end of file
D test/normalization/alpha/FunctionTypeBindingUnderscoreA.dhallb => test/normalization/alpha/FunctionTypeBindingUnderscoreA.dhallb +0 -1
@@ 1,1 0,0 @@
-�aAaB>
\ No newline at end of file
D test/normalization/alpha/FunctionTypeBindingUnderscoreB.dhallb => test/normalization/alpha/FunctionTypeBindingUnderscoreB.dhallb +0 -1
@@ 1,1 0,0 @@
-�aAaB>
\ No newline at end of file
D test/normalization/alpha/FunctionTypeBindingXA.dhallb => test/normalization/alpha/FunctionTypeBindingXA.dhallb +0 -1
@@ 1,1 0,0 @@
-�axaAax>
\ No newline at end of file
D test/normalization/alpha/FunctionTypeBindingXB.dhallb => test/normalization/alpha/FunctionTypeBindingXB.dhallb +0 -0
D test/normalization/alpha/FunctionTypeNestedBindingXA.dhallb => test/normalization/alpha/FunctionTypeNestedBindingXA.dhallb +0 -1
@@ 1,1 0,0 @@
-�axaA�aBax>
\ No newline at end of file
D test/normalization/alpha/FunctionTypeNestedBindingXB.dhallb => test/normalization/alpha/FunctionTypeNestedBindingXB.dhallb +0 -1
@@ 1,1 0,0 @@
-�aA�aB>
\ No newline at end of file
D test/normalization/beta/BoolA.dhallb => test/normalization/beta/BoolA.dhallb +0 -1
@@ 1,1 0,0 @@
-dBool>
\ No newline at end of file
D test/normalization/beta/BoolB.dhallb => test/normalization/beta/BoolB.dhallb +0 -1
@@ 1,1 0,0 @@
-dBool>
\ No newline at end of file
D test/normalization/beta/DoubleA.dhallb => test/normalization/beta/DoubleA.dhallb +0 -1
@@ 1,1 0,0 @@
-fDouble>
\ No newline at end of file
D test/normalization/beta/DoubleB.dhallb => test/normalization/beta/DoubleB.dhallb +0 -1
@@ 1,1 0,0 @@
-fDouble>
\ No newline at end of file
D test/normalization/beta/DoubleLiteralA.dhallb => test/normalization/beta/DoubleLiteralA.dhallb +0 -1
@@ 1,1 0,0 @@
-�?�333333>
\ No newline at end of file
D test/normalization/beta/DoubleLiteralB.dhallb => test/normalization/beta/DoubleLiteralB.dhallb +0 -1
@@ 1,1 0,0 @@
-�?�333333>
\ No newline at end of file
D test/normalization/beta/DoubleShowA.dhallb => test/normalization/beta/DoubleShowA.dhallb +0 -1
@@ 1,1 0,0 @@
-kDouble/show>
\ No newline at end of file
D test/normalization/beta/DoubleShowB.dhallb => test/normalization/beta/DoubleShowB.dhallb +0 -1
@@ 1,1 0,0 @@
-kDouble/show>
\ No newline at end of file
D test/normalization/beta/DoubleShowValueA.dhallb => test/normalization/beta/DoubleShowValueA.dhallb +0 -0
D test/normalization/beta/DoubleShowValueB.dhallb => test/normalization/beta/DoubleShowValueB.dhallb +0 -1
@@ 1,1 0,0 @@
-�c1.2>
\ No newline at end of file
D test/normalization/beta/FunctionApplicationCaptureA.dhallb => test/normalization/beta/FunctionApplicationCaptureA.dhallb +0 -0
D test/normalization/beta/FunctionApplicationCaptureB.dhallb => test/normalization/beta/FunctionApplicationCaptureB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/FunctionApplicationNoSubstituteA.dhallb => test/normalization/beta/FunctionApplicationNoSubstituteA.dhallb +0 -0
D test/normalization/beta/FunctionApplicationNoSubstituteB.dhallb => test/normalization/beta/FunctionApplicationNoSubstituteB.dhallb +0 -1
@@ 1,1 0,0 @@
-ay>
\ No newline at end of file
D test/normalization/beta/FunctionApplicationNormalizeArgumentsA.dhallb => test/normalization/beta/FunctionApplicationNormalizeArgumentsA.dhallb +0 -0
D test/normalization/beta/FunctionApplicationNormalizeArgumentsB.dhallb => test/normalization/beta/FunctionApplicationNormalizeArgumentsB.dhallb +0 -0
D test/normalization/beta/FunctionApplicationSubstituteA.dhallb => test/normalization/beta/FunctionApplicationSubstituteA.dhallb +0 -0
D test/normalization/beta/FunctionApplicationSubstituteB.dhallb => test/normalization/beta/FunctionApplicationSubstituteB.dhallb +0 -1
@@ 1,1 0,0 @@
-ay>
\ No newline at end of file
D test/normalization/beta/FunctionNormalizeArgumentsA.dhallb => test/normalization/beta/FunctionNormalizeArgumentsA.dhallb +0 -0
D test/normalization/beta/FunctionNormalizeArgumentsB.dhallb => test/normalization/beta/FunctionNormalizeArgumentsB.dhallb +0 -0
D test/normalization/beta/FunctionTypeNormalizeArgumentsA.dhallb => test/normalization/beta/FunctionTypeNormalizeArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-���aXaY��aAaB>
\ No newline at end of file
D test/normalization/beta/FunctionTypeNormalizeArgumentsB.dhallb => test/normalization/beta/FunctionTypeNormalizeArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-�aXaA>
\ No newline at end of file
D test/normalization/beta/IfAlternativesIdenticalA.dhallb => test/normalization/beta/IfAlternativesIdenticalA.dhallb +0 -1
@@ 1,1 0,0 @@
-�axayay>
\ No newline at end of file
D test/normalization/beta/IfAlternativesIdenticalB.dhallb => test/normalization/beta/IfAlternativesIdenticalB.dhallb +0 -1
@@ 1,1 0,0 @@
-ay>
\ No newline at end of file
D test/normalization/beta/IfFalseA.dhallb => test/normalization/beta/IfFalseA.dhallb +0 -1
@@ 1,1 0,0 @@
-���>
\ No newline at end of file
D test/normalization/beta/IfFalseB.dhallb => test/normalization/beta/IfFalseB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/IfNormalizePredicateAndBranchesA.dhallb => test/normalization/beta/IfNormalizePredicateAndBranchesA.dhallb +0 -1
@@ 1,1 0,0 @@
-���axay��aaab��acad>
\ No newline at end of file
D test/normalization/beta/IfNormalizePredicateAndBranchesB.dhallb => test/normalization/beta/IfNormalizePredicateAndBranchesB.dhallb +0 -1
@@ 1,1 0,0 @@
-�axaaac>
\ No newline at end of file
D test/normalization/beta/IfTrivialA.dhallb => test/normalization/beta/IfTrivialA.dhallb +0 -1
@@ 1,1 0,0 @@
-�ax��>
\ No newline at end of file
D test/normalization/beta/IfTrivialB.dhallb => test/normalization/beta/IfTrivialB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/IfTrueA.dhallb => test/normalization/beta/IfTrueA.dhallb +0 -1
@@ 1,1 0,0 @@
-����>
\ No newline at end of file
D test/normalization/beta/IfTrueB.dhallb => test/normalization/beta/IfTrueB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/IntegerA.dhallb => test/normalization/beta/IntegerA.dhallb +0 -1
@@ 1,1 0,0 @@
-gInteger>
\ No newline at end of file
D test/normalization/beta/IntegerB.dhallb => test/normalization/beta/IntegerB.dhallb +0 -1
@@ 1,1 0,0 @@
-gInteger>
\ No newline at end of file
D test/normalization/beta/IntegerNegativeA.dhallb => test/normalization/beta/IntegerNegativeA.dhallb +0 -1
@@ 1,1 0,0 @@
-� >
\ No newline at end of file
D test/normalization/beta/IntegerNegativeB.dhallb => test/normalization/beta/IntegerNegativeB.dhallb +0 -1
@@ 1,1 0,0 @@
-� >
\ No newline at end of file
D test/normalization/beta/IntegerPositiveA.dhallb => test/normalization/beta/IntegerPositiveA.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/IntegerPositiveB.dhallb => test/normalization/beta/IntegerPositiveB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/IntegerShow-12A.dhallb => test/normalization/beta/IntegerShow-12A.dhallb +0 -0
D test/normalization/beta/IntegerShow-12B.dhallb => test/normalization/beta/IntegerShow-12B.dhallb +0 -1
@@ 1,1 0,0 @@
-�c-12>
\ No newline at end of file
D test/normalization/beta/IntegerShow12A.dhallb => test/normalization/beta/IntegerShow12A.dhallb +0 -0
D test/normalization/beta/IntegerShow12B.dhallb => test/normalization/beta/IntegerShow12B.dhallb +0 -1
@@ 1,1 0,0 @@
-�c+12>
\ No newline at end of file
D test/normalization/beta/IntegerShowA.dhallb => test/normalization/beta/IntegerShowA.dhallb +0 -1
@@ 1,1 0,0 @@
-lInteger/show>
\ No newline at end of file
D test/normalization/beta/IntegerShowB.dhallb => test/normalization/beta/IntegerShowB.dhallb +0 -1
@@ 1,1 0,0 @@
-lInteger/show>
\ No newline at end of file
D test/normalization/beta/IntegerToDouble-12A.dhallb => test/normalization/beta/IntegerToDouble-12A.dhallb +0 -0
D test/normalization/beta/IntegerToDouble-12B.dhallb => test/normalization/beta/IntegerToDouble-12B.dhallb +0 -0
D test/normalization/beta/IntegerToDouble12A.dhallb => test/normalization/beta/IntegerToDouble12A.dhallb +0 -0
D test/normalization/beta/IntegerToDouble12B.dhallb => test/normalization/beta/IntegerToDouble12B.dhallb +0 -0
D test/normalization/beta/IntegerToDoubleA.dhallb => test/normalization/beta/IntegerToDoubleA.dhallb +0 -1
@@ 1,1 0,0 @@
-pInteger/toDouble>
\ No newline at end of file
D test/normalization/beta/IntegerToDoubleB.dhallb => test/normalization/beta/IntegerToDoubleB.dhallb +0 -1
@@ 1,1 0,0 @@
-pInteger/toDouble>
\ No newline at end of file
D test/normalization/beta/KindA.dhallb => test/normalization/beta/KindA.dhallb +0 -1
@@ 1,1 0,0 @@
-dKind>
\ No newline at end of file
D test/normalization/beta/KindB.dhallb => test/normalization/beta/KindB.dhallb +0 -1
@@ 1,1 0,0 @@
-dKind>
\ No newline at end of file
D test/normalization/beta/LetA.dhallb => test/normalization/beta/LetA.dhallb +0 -1
@@ 1,1 0,0 @@
-�ax�ayax>
\ No newline at end of file
D test/normalization/beta/LetB.dhallb => test/normalization/beta/LetB.dhallb +0 -1
@@ 1,1 0,0 @@
-ay>
\ No newline at end of file
D test/normalization/beta/LetWithTypeA.dhallb => test/normalization/beta/LetWithTypeA.dhallb +0 -1
@@ 1,1 0,0 @@
-�axaAayax>
\ No newline at end of file
D test/normalization/beta/LetWithTypeB.dhallb => test/normalization/beta/LetWithTypeB.dhallb +0 -1
@@ 1,1 0,0 @@
-ay>
\ No newline at end of file
D test/normalization/beta/ListA.dhallb => test/normalization/beta/ListA.dhallb +0 -1
@@ 1,1 0,0 @@
-dList>
\ No newline at end of file
D test/normalization/beta/ListB.dhallb => test/normalization/beta/ListB.dhallb +0 -1
@@ 1,1 0,0 @@
-dList>
\ No newline at end of file
D test/normalization/beta/ListBuildA.dhallb => test/normalization/beta/ListBuildA.dhallb +0 -1
@@ 1,1 0,0 @@
-jList/build>
\ No newline at end of file
D test/normalization/beta/ListBuildB.dhallb => test/normalization/beta/ListBuildB.dhallb +0 -1
@@ 1,1 0,0 @@
-jList/build>
\ No newline at end of file
D test/normalization/beta/ListBuildFoldFusionA.dhallb => test/normalization/beta/ListBuildFoldFusionA.dhallb +0 -0
D test/normalization/beta/ListBuildFoldFusionB.dhallb => test/normalization/beta/ListBuildFoldFusionB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/ListBuildImplementationA.dhallb => test/normalization/beta/ListBuildImplementationA.dhallb +0 -0
D test/normalization/beta/ListBuildImplementationB.dhallb => test/normalization/beta/ListBuildImplementationB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/ListFoldA.dhallb => test/normalization/beta/ListFoldA.dhallb +0 -1
@@ 1,1 0,0 @@
-iList/fold>
\ No newline at end of file
D test/normalization/beta/ListFoldB.dhallb => test/normalization/beta/ListFoldB.dhallb +0 -1
@@ 1,1 0,0 @@
-iList/fold>
\ No newline at end of file
D test/normalization/beta/ListFoldEmptyA.dhallb => test/normalization/beta/ListFoldEmptyA.dhallb +0 -0
D test/normalization/beta/ListFoldEmptyB.dhallb => test/normalization/beta/ListFoldEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/ListFoldOneA.dhallb => test/normalization/beta/ListFoldOneA.dhallb +0 -0
D test/normalization/beta/ListFoldOneB.dhallb => test/normalization/beta/ListFoldOneB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/ListHeadA.dhallb => test/normalization/beta/ListHeadA.dhallb +0 -1
@@ 1,1 0,0 @@
-iList/head>
\ No newline at end of file
D test/normalization/beta/ListHeadB.dhallb => test/normalization/beta/ListHeadB.dhallb +0 -1
@@ 1,1 0,0 @@
-iList/head>
\ No newline at end of file
D test/normalization/beta/ListHeadEmptyA.dhallb => test/normalization/beta/ListHeadEmptyA.dhallb +0 -0
D test/normalization/beta/ListHeadEmptyB.dhallb => test/normalization/beta/ListHeadEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-�aT>
\ No newline at end of file
D test/normalization/beta/ListHeadOneA.dhallb => test/normalization/beta/ListHeadOneA.dhallb +0 -0
D test/normalization/beta/ListHeadOneB.dhallb => test/normalization/beta/ListHeadOneB.dhallb +0 -1
@@ 1,1 0,0 @@
-���>
\ No newline at end of file
D test/normalization/beta/ListIndexedA.dhallb => test/normalization/beta/ListIndexedA.dhallb +0 -1
@@ 1,1 0,0 @@
-lList/indexed>
\ No newline at end of file
D test/normalization/beta/ListIndexedB.dhallb => test/normalization/beta/ListIndexedB.dhallb +0 -1
@@ 1,1 0,0 @@
-lList/indexed>
\ No newline at end of file
D test/normalization/beta/ListIndexedEmptyA.dhallb => test/normalization/beta/ListIndexedEmptyA.dhallb +0 -0
D test/normalization/beta/ListIndexedEmptyB.dhallb => test/normalization/beta/ListIndexedEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-���eindexgNaturalevalueaT>
\ No newline at end of file
D test/normalization/beta/ListIndexedOneA.dhallb => test/normalization/beta/ListIndexedOneA.dhallb +0 -0
D test/normalization/beta/ListIndexedOneB.dhallb => test/normalization/beta/ListIndexedOneB.dhallb +0 -0
D test/normalization/beta/ListLastA.dhallb => test/normalization/beta/ListLastA.dhallb +0 -1
@@ 1,1 0,0 @@
-iList/last>
\ No newline at end of file
D test/normalization/beta/ListLastB.dhallb => test/normalization/beta/ListLastB.dhallb +0 -1
@@ 1,1 0,0 @@
-iList/last>
\ No newline at end of file
D test/normalization/beta/ListLastEmptyA.dhallb => test/normalization/beta/ListLastEmptyA.dhallb +0 -0
D test/normalization/beta/ListLastEmptyB.dhallb => test/normalization/beta/ListLastEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-�aT>
\ No newline at end of file
D test/normalization/beta/ListLastOneA.dhallb => test/normalization/beta/ListLastOneA.dhallb +0 -0
D test/normalization/beta/ListLastOneB.dhallb => test/normalization/beta/ListLastOneB.dhallb +0 -1
@@ 1,1 0,0 @@
-���>
\ No newline at end of file
D test/normalization/beta/ListLengthA.dhallb => test/normalization/beta/ListLengthA.dhallb +0 -1
@@ 1,1 0,0 @@
-kList/length>
\ No newline at end of file
D test/normalization/beta/ListLengthB.dhallb => test/normalization/beta/ListLengthB.dhallb +0 -1
@@ 1,1 0,0 @@
-kList/length>
\ No newline at end of file
D test/normalization/beta/ListLengthEmptyA.dhallb => test/normalization/beta/ListLengthEmptyA.dhallb +0 -0
D test/normalization/beta/ListLengthEmptyB.dhallb => test/normalization/beta/ListLengthEmptyB.dhallb +0 -0
D test/normalization/beta/ListLengthOneA.dhallb => test/normalization/beta/ListLengthOneA.dhallb +0 -0
D test/normalization/beta/ListLengthOneB.dhallb => test/normalization/beta/ListLengthOneB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/ListNormalizeElementsA.dhallb => test/normalization/beta/ListNormalizeElementsA.dhallb +0 -1
@@ 1,1 0,0 @@
-����axay>
\ No newline at end of file
D test/normalization/beta/ListNormalizeElementsB.dhallb => test/normalization/beta/ListNormalizeElementsB.dhallb +0 -1
@@ 1,1 0,0 @@
-��ax>
\ No newline at end of file
D test/normalization/beta/ListNormalizeTypeAnnotationA.dhallb => test/normalization/beta/ListNormalizeTypeAnnotationA.dhallb +0 -1
@@ 1,1 0,0 @@
-���axay>
\ No newline at end of file
D test/normalization/beta/ListNormalizeTypeAnnotationB.dhallb => test/normalization/beta/ListNormalizeTypeAnnotationB.dhallb +0 -1
@@ 1,1 0,0 @@
-�ax>
\ No newline at end of file
D test/normalization/beta/ListReverseA.dhallb => test/normalization/beta/ListReverseA.dhallb +0 -1
@@ 1,1 0,0 @@
-lList/reverse>
\ No newline at end of file
D test/normalization/beta/ListReverseB.dhallb => test/normalization/beta/ListReverseB.dhallb +0 -1
@@ 1,1 0,0 @@
-lList/reverse>
\ No newline at end of file
D test/normalization/beta/ListReverseEmptyA.dhallb => test/normalization/beta/ListReverseEmptyA.dhallb +0 -0
D test/normalization/beta/ListReverseEmptyB.dhallb => test/normalization/beta/ListReverseEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-�aT>
\ No newline at end of file
D test/normalization/beta/ListReverseTwoA.dhallb => test/normalization/beta/ListReverseTwoA.dhallb +0 -0
D test/normalization/beta/ListReverseTwoB.dhallb => test/normalization/beta/ListReverseTwoB.dhallb +0 -1
@@ 1,1 0,0 @@
-����>
\ No newline at end of file
D test/normalization/beta/MergeA.dhallb => test/normalization/beta/MergeA.dhallb +0 -0
D test/normalization/beta/MergeB.dhallb => test/normalization/beta/MergeB.dhallb +0 -1
@@ 1,1 0,0 @@
-ay>
\ No newline at end of file
D test/normalization/beta/MergeNormalizeArgumentsA.dhallb => test/normalization/beta/MergeNormalizeArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-���axay��azab>
\ No newline at end of file
D test/normalization/beta/MergeNormalizeArgumentsB.dhallb => test/normalization/beta/MergeNormalizeArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-�axaz>
\ No newline at end of file
D test/normalization/beta/MergeWithTypeA.dhallb => test/normalization/beta/MergeWithTypeA.dhallb +0 -0
D test/normalization/beta/MergeWithTypeB.dhallb => test/normalization/beta/MergeWithTypeB.dhallb +0 -1
@@ 1,1 0,0 @@
-ay>
\ No newline at end of file
D test/normalization/beta/MergeWithTypeNormalizeArgumentsA.dhallb => test/normalization/beta/MergeWithTypeNormalizeArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-���axay��azab��aXaY>
\ No newline at end of file
D test/normalization/beta/MergeWithTypeNormalizeArgumentsB.dhallb => test/normalization/beta/MergeWithTypeNormalizeArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-�axazaX>
\ No newline at end of file
D test/normalization/beta/NaturalA.dhallb => test/normalization/beta/NaturalA.dhallb +0 -1
@@ 1,1 0,0 @@
-gNatural>
\ No newline at end of file
D test/normalization/beta/NaturalB.dhallb => test/normalization/beta/NaturalB.dhallb +0 -1
@@ 1,1 0,0 @@
-gNatural>
\ No newline at end of file
D test/normalization/beta/NaturalBuildA.dhallb => test/normalization/beta/NaturalBuildA.dhallb +0 -1
@@ 1,1 0,0 @@
-mNatural/build>
\ No newline at end of file
D test/normalization/beta/NaturalBuildB.dhallb => test/normalization/beta/NaturalBuildB.dhallb +0 -1
@@ 1,1 0,0 @@
-mNatural/build>
\ No newline at end of file
D test/normalization/beta/NaturalBuildFoldFusionA.dhallb => test/normalization/beta/NaturalBuildFoldFusionA.dhallb +0 -0
D test/normalization/beta/NaturalBuildFoldFusionB.dhallb => test/normalization/beta/NaturalBuildFoldFusionB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/NaturalBuildImplementationA.dhallb => test/normalization/beta/NaturalBuildImplementationA.dhallb +0 -0
D test/normalization/beta/NaturalBuildImplementationB.dhallb => test/normalization/beta/NaturalBuildImplementationB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/NaturalEvenA.dhallb => test/normalization/beta/NaturalEvenA.dhallb +0 -1
@@ 1,1 0,0 @@
-lNatural/even>
\ No newline at end of file
D test/normalization/beta/NaturalEvenB.dhallb => test/normalization/beta/NaturalEvenB.dhallb +0 -1
@@ 1,1 0,0 @@
-lNatural/even>
\ No newline at end of file
D test/normalization/beta/NaturalEvenOneA.dhallb => test/normalization/beta/NaturalEvenOneA.dhallb +0 -0
D test/normalization/beta/NaturalEvenOneB.dhallb => test/normalization/beta/NaturalEvenOneB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/NaturalEvenZeroA.dhallb => test/normalization/beta/NaturalEvenZeroA.dhallb +0 -0
D test/normalization/beta/NaturalEvenZeroB.dhallb => test/normalization/beta/NaturalEvenZeroB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/NaturalFoldA.dhallb => test/normalization/beta/NaturalFoldA.dhallb +0 -1
@@ 1,1 0,0 @@
-lNatural/fold>
\ No newline at end of file
D test/normalization/beta/NaturalFoldB.dhallb => test/normalization/beta/NaturalFoldB.dhallb +0 -1
@@ 1,1 0,0 @@
-lNatural/fold>
\ No newline at end of file
D test/normalization/beta/NaturalFoldOneA.dhallb => test/normalization/beta/NaturalFoldOneA.dhallb +0 -0
D test/normalization/beta/NaturalFoldOneB.dhallb => test/normalization/beta/NaturalFoldOneB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/NaturalFoldZeroA.dhallb => test/normalization/beta/NaturalFoldZeroA.dhallb +0 -0
D test/normalization/beta/NaturalFoldZeroB.dhallb => test/normalization/beta/NaturalFoldZeroB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/NaturalIsZeroA.dhallb => test/normalization/beta/NaturalIsZeroA.dhallb +0 -1
@@ 1,1 0,0 @@
-nNatural/isZero>
\ No newline at end of file
D test/normalization/beta/NaturalIsZeroB.dhallb => test/normalization/beta/NaturalIsZeroB.dhallb +0 -1
@@ 1,1 0,0 @@
-nNatural/isZero>
\ No newline at end of file
D test/normalization/beta/NaturalIsZeroOneA.dhallb => test/normalization/beta/NaturalIsZeroOneA.dhallb +0 -0
D test/normalization/beta/NaturalIsZeroOneB.dhallb => test/normalization/beta/NaturalIsZeroOneB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/NaturalIsZeroZeroA.dhallb => test/normalization/beta/NaturalIsZeroZeroA.dhallb +0 -0
D test/normalization/beta/NaturalIsZeroZeroB.dhallb => test/normalization/beta/NaturalIsZeroZeroB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/NaturalLiteralA.dhallb => test/normalization/beta/NaturalLiteralA.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/NaturalLiteralB.dhallb => test/normalization/beta/NaturalLiteralB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/NaturalOddA.dhallb => test/normalization/beta/NaturalOddA.dhallb +0 -1
@@ 1,1 0,0 @@
-kNatural/odd>
\ No newline at end of file
D test/normalization/beta/NaturalOddB.dhallb => test/normalization/beta/NaturalOddB.dhallb +0 -1
@@ 1,1 0,0 @@
-kNatural/odd>
\ No newline at end of file
D test/normalization/beta/NaturalOddOneA.dhallb => test/normalization/beta/NaturalOddOneA.dhallb +0 -0
D test/normalization/beta/NaturalOddOneB.dhallb => test/normalization/beta/NaturalOddOneB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/NaturalOddZeroA.dhallb => test/normalization/beta/NaturalOddZeroA.dhallb +0 -0
D test/normalization/beta/NaturalOddZeroB.dhallb => test/normalization/beta/NaturalOddZeroB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/NaturalShowA.dhallb => test/normalization/beta/NaturalShowA.dhallb +0 -1
@@ 1,1 0,0 @@
-lNatural/show>
\ No newline at end of file
D test/normalization/beta/NaturalShowB.dhallb => test/normalization/beta/NaturalShowB.dhallb +0 -1
@@ 1,1 0,0 @@
-lNatural/show>
\ No newline at end of file
D test/normalization/beta/NaturalShowOneA.dhallb => test/normalization/beta/NaturalShowOneA.dhallb +0 -0
D test/normalization/beta/NaturalShowOneB.dhallb => test/normalization/beta/NaturalShowOneB.dhallb +0 -1
@@ 1,1 0,0 @@
-�a1>
\ No newline at end of file
D test/normalization/beta/NaturalToIntegerA.dhallb => test/normalization/beta/NaturalToIntegerA.dhallb +0 -1
@@ 1,1 0,0 @@
-qNatural/toInteger>
\ No newline at end of file
D test/normalization/beta/NaturalToIntegerB.dhallb => test/normalization/beta/NaturalToIntegerB.dhallb +0 -1
@@ 1,1 0,0 @@
-qNatural/toInteger>
\ No newline at end of file
D test/normalization/beta/NaturalToIntegerOneA.dhallb => test/normalization/beta/NaturalToIntegerOneA.dhallb +0 -0
D test/normalization/beta/NaturalToIntegerOneB.dhallb => test/normalization/beta/NaturalToIntegerOneB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/NoneA.dhallb => test/normalization/beta/NoneA.dhallb +0 -1
@@ 1,1 0,0 @@
-dNone>
\ No newline at end of file
D test/normalization/beta/NoneB.dhallb => test/normalization/beta/NoneB.dhallb +0 -1
@@ 1,1 0,0 @@
-dNone>
\ No newline at end of file
D test/normalization/beta/NoneNaturalA.dhallb => test/normalization/beta/NoneNaturalA.dhallb +0 -1
@@ 1,1 0,0 @@
-�gNatural>
\ No newline at end of file
D test/normalization/beta/NoneNaturalB.dhallb => test/normalization/beta/NoneNaturalB.dhallb +0 -1
@@ 1,1 0,0 @@
-�gNatural>
\ No newline at end of file
D test/normalization/beta/OperatorAndEquivalentArgumentsA.dhallb => test/normalization/beta/OperatorAndEquivalentArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-�axax>
\ No newline at end of file
D test/normalization/beta/OperatorAndEquivalentArgumentsB.dhallb => test/normalization/beta/OperatorAndEquivalentArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorAndLhsFalseA.dhallb => test/normalization/beta/OperatorAndLhsFalseA.dhallb +0 -1
@@ 1,1 0,0 @@
-��ax>
\ No newline at end of file
D test/normalization/beta/OperatorAndLhsFalseB.dhallb => test/normalization/beta/OperatorAndLhsFalseB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/OperatorAndLhsTrueA.dhallb => test/normalization/beta/OperatorAndLhsTrueA.dhallb +0 -1
@@ 1,1 0,0 @@
-��ax>
\ No newline at end of file
D test/normalization/beta/OperatorAndLhsTrueB.dhallb => test/normalization/beta/OperatorAndLhsTrueB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorAndNormalizeArgumentsA.dhallb => test/normalization/beta/OperatorAndNormalizeArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-���ax��ay>
\ No newline at end of file
D test/normalization/beta/OperatorAndNormalizeArgumentsB.dhallb => test/normalization/beta/OperatorAndNormalizeArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-�axay>
\ No newline at end of file
D test/normalization/beta/OperatorAndRhsFalseA.dhallb => test/normalization/beta/OperatorAndRhsFalseA.dhallb +0 -1
@@ 1,1 0,0 @@
-�ax�>
\ No newline at end of file
D test/normalization/beta/OperatorAndRhsFalseB.dhallb => test/normalization/beta/OperatorAndRhsFalseB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/OperatorAndRhsTrueA.dhallb => test/normalization/beta/OperatorAndRhsTrueA.dhallb +0 -1
@@ 1,1 0,0 @@
-�ax�>
\ No newline at end of file
D test/normalization/beta/OperatorAndRhsTrueB.dhallb => test/normalization/beta/OperatorAndRhsTrueB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorEqualEquivalentArgumentsA.dhallb => test/normalization/beta/OperatorEqualEquivalentArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-�axax>
\ No newline at end of file
D test/normalization/beta/OperatorEqualEquivalentArgumentsB.dhallb => test/normalization/beta/OperatorEqualEquivalentArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/OperatorEqualLhsTrueA.dhallb => test/normalization/beta/OperatorEqualLhsTrueA.dhallb +0 -1
@@ 1,1 0,0 @@
-�ax�>
\ No newline at end of file
D test/normalization/beta/OperatorEqualLhsTrueB.dhallb => test/normalization/beta/OperatorEqualLhsTrueB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorEqualNormalizeArgumentsA.dhallb => test/normalization/beta/OperatorEqualNormalizeArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-���ax��ay>
\ No newline at end of file
D test/normalization/beta/OperatorEqualNormalizeArgumentsB.dhallb => test/normalization/beta/OperatorEqualNormalizeArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-�axay>
\ No newline at end of file
D test/normalization/beta/OperatorEqualRhsTrueA.dhallb => test/normalization/beta/OperatorEqualRhsTrueA.dhallb +0 -1
@@ 1,1 0,0 @@
-��ax>
\ No newline at end of file
D test/normalization/beta/OperatorEqualRhsTrueB.dhallb => test/normalization/beta/OperatorEqualRhsTrueB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorListConcatenateLhsEmptyA.dhallb => test/normalization/beta/OperatorListConcatenateLhsEmptyA.dhallb +0 -1
@@ 1,1 0,0 @@
-�ax�aT>
\ No newline at end of file
D test/normalization/beta/OperatorListConcatenateLhsEmptyB.dhallb => test/normalization/beta/OperatorListConcatenateLhsEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorListConcatenateListListA.dhallb => test/normalization/beta/OperatorListConcatenateListListA.dhallb +0 -1
@@ 1,1 0,0 @@
-���ax��ay>
\ No newline at end of file
D test/normalization/beta/OperatorListConcatenateListListB.dhallb => test/normalization/beta/OperatorListConcatenateListListB.dhallb +0 -1
@@ 1,1 0,0 @@
-��axay>
\ No newline at end of file
D test/normalization/beta/OperatorListConcatenateNormalizeArgumentsA.dhallb => test/normalization/beta/OperatorListConcatenateNormalizeArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-���aTax��aTay>
\ No newline at end of file
D test/normalization/beta/OperatorListConcatenateNormalizeArgumentsB.dhallb => test/normalization/beta/OperatorListConcatenateNormalizeArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-�axay>
\ No newline at end of file
D test/normalization/beta/OperatorListConcatenateRhsEmptyA.dhallb => test/normalization/beta/OperatorListConcatenateRhsEmptyA.dhallb +0 -1
@@ 1,1 0,0 @@
-��aTax>
\ No newline at end of file
D test/normalization/beta/OperatorListConcatenateRhsEmptyB.dhallb => test/normalization/beta/OperatorListConcatenateRhsEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorNotEqualEquivalentArgumentsA.dhallb => test/normalization/beta/OperatorNotEqualEquivalentArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-�axax>
\ No newline at end of file
D test/normalization/beta/OperatorNotEqualEquivalentArgumentsB.dhallb => test/normalization/beta/OperatorNotEqualEquivalentArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/OperatorNotEqualLhsFalseA.dhallb => test/normalization/beta/OperatorNotEqualLhsFalseA.dhallb +0 -1
@@ 1,1 0,0 @@
-��ax>
\ No newline at end of file
D test/normalization/beta/OperatorNotEqualLhsFalseB.dhallb => test/normalization/beta/OperatorNotEqualLhsFalseB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorNotEqualNormalizeArgumentsA.dhallb => test/normalization/beta/OperatorNotEqualNormalizeArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-���ax��ay>
\ No newline at end of file
D test/normalization/beta/OperatorNotEqualNormalizeArgumentsB.dhallb => test/normalization/beta/OperatorNotEqualNormalizeArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-�axay>
\ No newline at end of file
D test/normalization/beta/OperatorNotEqualRhsFalseA.dhallb => test/normalization/beta/OperatorNotEqualRhsFalseA.dhallb +0 -1
@@ 1,1 0,0 @@
-�ax�>
\ No newline at end of file
D test/normalization/beta/OperatorNotEqualRhsFalseB.dhallb => test/normalization/beta/OperatorNotEqualRhsFalseB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorOrEquivalentArgumentsA.dhallb => test/normalization/beta/OperatorOrEquivalentArgumentsA.dhallb +0 -0
D test/normalization/beta/OperatorOrEquivalentArgumentsB.dhallb => test/normalization/beta/OperatorOrEquivalentArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorOrLhsFalseA.dhallb => test/normalization/beta/OperatorOrLhsFalseA.dhallb +0 -0
D test/normalization/beta/OperatorOrLhsFalseB.dhallb => test/normalization/beta/OperatorOrLhsFalseB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorOrLhsTrueA.dhallb => test/normalization/beta/OperatorOrLhsTrueA.dhallb +0 -0
D test/normalization/beta/OperatorOrLhsTrueB.dhallb => test/normalization/beta/OperatorOrLhsTrueB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/OperatorOrNormalizeArgumentsA.dhallb => test/normalization/beta/OperatorOrNormalizeArgumentsA.dhallb +0 -0
D test/normalization/beta/OperatorOrNormalizeArgumentsB.dhallb => test/normalization/beta/OperatorOrNormalizeArgumentsB.dhallb +0 -0
D test/normalization/beta/OperatorOrRhsFalseA.dhallb => test/normalization/beta/OperatorOrRhsFalseA.dhallb +0 -0
D test/normalization/beta/OperatorOrRhsFalseB.dhallb => test/normalization/beta/OperatorOrRhsFalseB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorOrRhsTrueA.dhallb => test/normalization/beta/OperatorOrRhsTrueA.dhallb +0 -0
D test/normalization/beta/OperatorOrRhsTrueB.dhallb => test/normalization/beta/OperatorOrRhsTrueB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/OperatorPlusLhsZeroA.dhallb => test/normalization/beta/OperatorPlusLhsZeroA.dhallb +0 -0
D test/normalization/beta/OperatorPlusLhsZeroB.dhallb => test/normalization/beta/OperatorPlusLhsZeroB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorPlusNormalizeArgumentsA.dhallb => test/normalization/beta/OperatorPlusNormalizeArgumentsA.dhallb +0 -0
D test/normalization/beta/OperatorPlusNormalizeArgumentsB.dhallb => test/normalization/beta/OperatorPlusNormalizeArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-�axay>
\ No newline at end of file
D test/normalization/beta/OperatorPlusOneAndOneA.dhallb => test/normalization/beta/OperatorPlusOneAndOneA.dhallb +0 -1
@@ 1,1 0,0 @@
-���>
\ No newline at end of file
D test/normalization/beta/OperatorPlusOneAndOneB.dhallb => test/normalization/beta/OperatorPlusOneAndOneB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/OperatorPlusRhsZeroA.dhallb => test/normalization/beta/OperatorPlusRhsZeroA.dhallb +0 -0
D test/normalization/beta/OperatorPlusRhsZeroB.dhallb => test/normalization/beta/OperatorPlusRhsZeroB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorTextConcatenateLhsEmptyA.dhallb => test/normalization/beta/OperatorTextConcatenateLhsEmptyA.dhallb +0 -1
@@ 1,1 0,0 @@
-��`ax>
\ No newline at end of file
D test/normalization/beta/OperatorTextConcatenateLhsEmptyB.dhallb => test/normalization/beta/OperatorTextConcatenateLhsEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorTextConcatenateNormalizeArgumentsA.dhallb => test/normalization/beta/OperatorTextConcatenateNormalizeArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-���`ax��`ay>
\ No newline at end of file
D test/normalization/beta/OperatorTextConcatenateNormalizeArgumentsB.dhallb => test/normalization/beta/OperatorTextConcatenateNormalizeArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-�axay>
\ No newline at end of file
D test/normalization/beta/OperatorTextConcatenateRhsEmptyA.dhallb => test/normalization/beta/OperatorTextConcatenateRhsEmptyA.dhallb +0 -1
@@ 1,1 0,0 @@
-�ax�`>
\ No newline at end of file
D test/normalization/beta/OperatorTextConcatenateRhsEmptyB.dhallb => test/normalization/beta/OperatorTextConcatenateRhsEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorTextConcatenateTextTextA.dhallb => test/normalization/beta/OperatorTextConcatenateTextTextA.dhallb +0 -1
@@ 1,1 0,0 @@
-��ax�ay>
\ No newline at end of file
D test/normalization/beta/OperatorTextConcatenateTextTextB.dhallb => test/normalization/beta/OperatorTextConcatenateTextTextB.dhallb +0 -1
@@ 1,1 0,0 @@
-�bxy>
\ No newline at end of file
D test/normalization/beta/OperatorTimesLhsOneA.dhallb => test/normalization/beta/OperatorTimesLhsOneA.dhallb +0 -1
@@ 1,1 0,0 @@
-��ax>
\ No newline at end of file
D test/normalization/beta/OperatorTimesLhsOneB.dhallb => test/normalization/beta/OperatorTimesLhsOneB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorTimesLhsZeroA.dhallb => test/normalization/beta/OperatorTimesLhsZeroA.dhallb +0 -0
D test/normalization/beta/OperatorTimesLhsZeroB.dhallb => test/normalization/beta/OperatorTimesLhsZeroB.dhallb +0 -0
D test/normalization/beta/OperatorTimesNormalizeArgumentsA.dhallb => test/normalization/beta/OperatorTimesNormalizeArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-���ax��ay>
\ No newline at end of file
D test/normalization/beta/OperatorTimesNormalizeArgumentsB.dhallb => test/normalization/beta/OperatorTimesNormalizeArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-�axay>
\ No newline at end of file
D test/normalization/beta/OperatorTimesRhsOneA.dhallb => test/normalization/beta/OperatorTimesRhsOneA.dhallb +0 -1
@@ 1,1 0,0 @@
-�ax�>
\ No newline at end of file
D test/normalization/beta/OperatorTimesRhsOneB.dhallb => test/normalization/beta/OperatorTimesRhsOneB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OperatorTimesRhsZeroA.dhallb => test/normalization/beta/OperatorTimesRhsZeroA.dhallb +0 -0
D test/normalization/beta/OperatorTimesRhsZeroB.dhallb => test/normalization/beta/OperatorTimesRhsZeroB.dhallb +0 -0
D test/normalization/beta/OperatorTimesTwoAndTwoA.dhallb => test/normalization/beta/OperatorTimesTwoAndTwoA.dhallb +0 -1
@@ 1,1 0,0 @@
-���>
\ No newline at end of file
D test/normalization/beta/OperatorTimesTwoAndTwoB.dhallb => test/normalization/beta/OperatorTimesTwoAndTwoB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/OptionalA.dhallb => test/normalization/beta/OptionalA.dhallb +0 -1
@@ 1,1 0,0 @@
-hOptional>
\ No newline at end of file
D test/normalization/beta/OptionalB.dhallb => test/normalization/beta/OptionalB.dhallb +0 -1
@@ 1,1 0,0 @@
-hOptional>
\ No newline at end of file
D test/normalization/beta/OptionalBuildA.dhallb => test/normalization/beta/OptionalBuildA.dhallb +0 -1
@@ 1,1 0,0 @@
-nOptional/build>
\ No newline at end of file
D test/normalization/beta/OptionalBuildB.dhallb => test/normalization/beta/OptionalBuildB.dhallb +0 -1
@@ 1,1 0,0 @@
-nOptional/build>
\ No newline at end of file
D test/normalization/beta/OptionalBuildFoldFusionA.dhallb => test/normalization/beta/OptionalBuildFoldFusionA.dhallb +0 -0
D test/normalization/beta/OptionalBuildFoldFusionB.dhallb => test/normalization/beta/OptionalBuildFoldFusionB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OptionalBuildImplementationA.dhallb => test/normalization/beta/OptionalBuildImplementationA.dhallb +0 -0
D test/normalization/beta/OptionalBuildImplementationB.dhallb => test/normalization/beta/OptionalBuildImplementationB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OptionalFoldA.dhallb => test/normalization/beta/OptionalFoldA.dhallb +0 -1
@@ 1,1 0,0 @@
-mOptional/fold>
\ No newline at end of file
D test/normalization/beta/OptionalFoldB.dhallb => test/normalization/beta/OptionalFoldB.dhallb +0 -1
@@ 1,1 0,0 @@
-mOptional/fold>
\ No newline at end of file
D test/normalization/beta/OptionalFoldNoneA.dhallb => test/normalization/beta/OptionalFoldNoneA.dhallb +0 -0
D test/normalization/beta/OptionalFoldNoneB.dhallb => test/normalization/beta/OptionalFoldNoneB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/OptionalFoldSomeA.dhallb => test/normalization/beta/OptionalFoldSomeA.dhallb +0 -0
D test/normalization/beta/OptionalFoldSomeB.dhallb => test/normalization/beta/OptionalFoldSomeB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/RecordA.dhallb => test/normalization/beta/RecordA.dhallb +0 -1
@@ 1,1 0,0 @@
-��aa��ayazabax>
\ No newline at end of file
D test/normalization/beta/RecordB.dhallb => test/normalization/beta/RecordB.dhallb +0 -1
@@ 1,1 0,0 @@
-��aaayabax>
\ No newline at end of file
D test/normalization/beta/RecordEmptyA.dhallb => test/normalization/beta/RecordEmptyA.dhallb +0 -1
@@ 1,1 0,0 @@
-��>
\ No newline at end of file
D test/normalization/beta/RecordEmptyB.dhallb => test/normalization/beta/RecordEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-��>
\ No newline at end of file
D test/normalization/beta/RecordProjectionA.dhallb => test/normalization/beta/RecordProjectionA.dhallb +0 -2
@@ 1,2 0,0 @@
-�
-��axaaayabazacaxaz>
\ No newline at end of file
D test/normalization/beta/RecordProjectionB.dhallb => test/normalization/beta/RecordProjectionB.dhallb +0 -1
@@ 1,1 0,0 @@
-��axaaazac>
\ No newline at end of file
D test/normalization/beta/RecordProjectionEmptyA.dhallb => test/normalization/beta/RecordProjectionEmptyA.dhallb +0 -2
@@ 1,2 0,0 @@
-�
-ax>
\ No newline at end of file
D test/normalization/beta/RecordProjectionEmptyB.dhallb => test/normalization/beta/RecordProjectionEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-��>
\ No newline at end of file
D test/normalization/beta/RecordProjectionNormalizeArgumentsA.dhallb => test/normalization/beta/RecordProjectionNormalizeArgumentsA.dhallb +0 -2
@@ 1,2 0,0 @@
-�
-��ayazaxay>
\ No newline at end of file
D test/normalization/beta/RecordProjectionNormalizeArgumentsB.dhallb => test/normalization/beta/RecordProjectionNormalizeArgumentsB.dhallb +0 -2
@@ 1,2 0,0 @@
-�
-ayaxay>
\ No newline at end of file
D test/normalization/beta/RecordSelectionA.dhallb => test/normalization/beta/RecordSelectionA.dhallb +0 -1
@@ 1,1 0,0 @@
-� ��axavax>
\ No newline at end of file
D test/normalization/beta/RecordSelectionB.dhallb => test/normalization/beta/RecordSelectionB.dhallb +0 -1
@@ 1,1 0,0 @@
-av>
\ No newline at end of file
D test/normalization/beta/RecordSelectionNormalizeArgumentsA.dhallb => test/normalization/beta/RecordSelectionNormalizeArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-� ��ayazax>
\ No newline at end of file
D test/normalization/beta/RecordSelectionNormalizeArgumentsB.dhallb => test/normalization/beta/RecordSelectionNormalizeArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-� ayax>
\ No newline at end of file
D test/normalization/beta/RecordTypeA.dhallb => test/normalization/beta/RecordTypeA.dhallb +0 -1
@@ 1,1 0,0 @@
-��aa��aAaBabaT>
\ No newline at end of file
D test/normalization/beta/RecordTypeB.dhallb => test/normalization/beta/RecordTypeB.dhallb +0 -1
@@ 1,1 0,0 @@
-��aaaAabaT>
\ No newline at end of file
D test/normalization/beta/RecordTypeEmptyA.dhallb => test/normalization/beta/RecordTypeEmptyA.dhallb +0 -1
@@ 1,1 0,0 @@
-��>
\ No newline at end of file
D test/normalization/beta/RecordTypeEmptyB.dhallb => test/normalization/beta/RecordTypeEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-��>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordMergeCollisionA.dhallb => test/normalization/beta/RecursiveRecordMergeCollisionA.dhallb +0 -1
@@ 1,1 0,0 @@
-���ax��az���ax��ay�>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordMergeCollisionB.dhallb => test/normalization/beta/RecursiveRecordMergeCollisionB.dhallb +0 -1
@@ 1,1 0,0 @@
-��ax��ay�az�>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordMergeLhsEmptyA.dhallb => test/normalization/beta/RecursiveRecordMergeLhsEmptyA.dhallb +0 -1
@@ 1,1 0,0 @@
-���ax>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordMergeLhsEmptyB.dhallb => test/normalization/beta/RecursiveRecordMergeLhsEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordMergeNoCollisionA.dhallb => test/normalization/beta/RecursiveRecordMergeNoCollisionA.dhallb +0 -1
@@ 1,1 0,0 @@
-���ax��az���ab��ay�>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordMergeNoCollisionB.dhallb => test/normalization/beta/RecursiveRecordMergeNoCollisionB.dhallb +0 -1
@@ 1,1 0,0 @@
-��ab��ay�ax��az�>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordMergeNormalizeArgumentsA.dhallb => test/normalization/beta/RecursiveRecordMergeNormalizeArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-��ax�����ab>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordMergeNormalizeArgumentsB.dhallb => test/normalization/beta/RecursiveRecordMergeNormalizeArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-�axab>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordMergeRhsEmptyA.dhallb => test/normalization/beta/RecursiveRecordMergeRhsEmptyA.dhallb +0 -1
@@ 1,1 0,0 @@
-�ax��>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordMergeRhsEmptyB.dhallb => test/normalization/beta/RecursiveRecordMergeRhsEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordTypeMergeCollisionA.dhallb => test/normalization/beta/RecursiveRecordTypeMergeCollisionA.dhallb +0 -2
@@ 1,2 0,0 @@
-�
-��ax��azaA��ax��ayaB>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordTypeMergeCollisionB.dhallb => test/normalization/beta/RecursiveRecordTypeMergeCollisionB.dhallb +0 -1
@@ 1,1 0,0 @@
-��ax��ayaBazaA>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordTypeMergeLhsEmptyA.dhallb => test/normalization/beta/RecursiveRecordTypeMergeLhsEmptyA.dhallb +0 -2
@@ 1,2 0,0 @@
-�
-��ax>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordTypeMergeLhsEmptyB.dhallb => test/normalization/beta/RecursiveRecordTypeMergeLhsEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordTypeMergeNoCollisionA.dhallb => test/normalization/beta/RecursiveRecordTypeMergeNoCollisionA.dhallb +0 -2
@@ 1,2 0,0 @@
-�
-��ax��azaA��ab��ayaB>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordTypeMergeNoCollisionB.dhallb => test/normalization/beta/RecursiveRecordTypeMergeNoCollisionB.dhallb +0 -1
@@ 1,1 0,0 @@
-��ab��ayaBax��azaA>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordTypeMergeNormalizeArgumentsA.dhallb => test/normalization/beta/RecursiveRecordTypeMergeNormalizeArgumentsA.dhallb +0 -4
@@ 1,4 0,0 @@
-�
-�
-ax���
-��ab>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordTypeMergeNormalizeArgumentsB.dhallb => test/normalization/beta/RecursiveRecordTypeMergeNormalizeArgumentsB.dhallb +0 -2
@@ 1,2 0,0 @@
-�
-axab>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordTypeMergeRhsEmptyA.dhallb => test/normalization/beta/RecursiveRecordTypeMergeRhsEmptyA.dhallb +0 -2
@@ 1,2 0,0 @@
-�
-ax��>
\ No newline at end of file
D test/normalization/beta/RecursiveRecordTypeMergeRhsEmptyB.dhallb => test/normalization/beta/RecursiveRecordTypeMergeRhsEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/RightBiasedRecordMergeCollisionA.dhallb => test/normalization/beta/RightBiasedRecordMergeCollisionA.dhallb +0 -1
@@ 1,1 0,0 @@
-� ��ax�ay���ax�>
\ No newline at end of file
D test/normalization/beta/RightBiasedRecordMergeCollisionB.dhallb => test/normalization/beta/RightBiasedRecordMergeCollisionB.dhallb +0 -1
@@ 1,1 0,0 @@
-��ax�ay�>
\ No newline at end of file
D test/normalization/beta/RightBiasedRecordMergeLhsEmptyA.dhallb => test/normalization/beta/RightBiasedRecordMergeLhsEmptyA.dhallb +0 -1
@@ 1,1 0,0 @@
-� ��ax>
\ No newline at end of file
D test/normalization/beta/RightBiasedRecordMergeLhsEmptyB.dhallb => test/normalization/beta/RightBiasedRecordMergeLhsEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/RightBiasedRecordMergeNoCollisionA.dhallb => test/normalization/beta/RightBiasedRecordMergeNoCollisionA.dhallb +0 -1
@@ 1,1 0,0 @@
-� ��ax�ay���aa�>
\ No newline at end of file
D test/normalization/beta/RightBiasedRecordMergeNoCollisionB.dhallb => test/normalization/beta/RightBiasedRecordMergeNoCollisionB.dhallb +0 -1
@@ 1,1 0,0 @@
-��aa�ax�ay�>
\ No newline at end of file
D test/normalization/beta/RightBiasedRecordMergeNormalizeArgumentsA.dhallb => test/normalization/beta/RightBiasedRecordMergeNormalizeArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-� � ax��� ay��>
\ No newline at end of file
D test/normalization/beta/RightBiasedRecordMergeNormalizeArgumentsB.dhallb => test/normalization/beta/RightBiasedRecordMergeNormalizeArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-� axay>
\ No newline at end of file
D test/normalization/beta/RightBiasedRecordMergeRhsEmptyA.dhallb => test/normalization/beta/RightBiasedRecordMergeRhsEmptyA.dhallb +0 -1
@@ 1,1 0,0 @@
-� ax��>
\ No newline at end of file
D test/normalization/beta/RightBiasedRecordMergeRhsEmptyB.dhallb => test/normalization/beta/RightBiasedRecordMergeRhsEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/SomeNormalizeArgumentsA.dhallb => test/normalization/beta/SomeNormalizeArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-����axay>
\ No newline at end of file
D test/normalization/beta/SomeNormalizeArgumentsB.dhallb => test/normalization/beta/SomeNormalizeArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-��ax>
\ No newline at end of file
D test/normalization/beta/SortA.dhallb => test/normalization/beta/SortA.dhallb +0 -1
@@ 1,1 0,0 @@
-dSort>
\ No newline at end of file
D test/normalization/beta/SortB.dhallb => test/normalization/beta/SortB.dhallb +0 -1
@@ 1,1 0,0 @@
-dSort>
\ No newline at end of file
D test/normalization/beta/TextA.dhallb => test/normalization/beta/TextA.dhallb +0 -1
@@ 1,1 0,0 @@
-dText>
\ No newline at end of file
D test/normalization/beta/TextB.dhallb => test/normalization/beta/TextB.dhallb +0 -1
@@ 1,1 0,0 @@
-dText>
\ No newline at end of file
D test/normalization/beta/TextInterpolateA.dhallb => test/normalization/beta/TextInterpolateA.dhallb +0 -1
@@ 1,1 0,0 @@
-�as�abax``>
\ No newline at end of file
D test/normalization/beta/TextInterpolateB.dhallb => test/normalization/beta/TextInterpolateB.dhallb +0 -1
@@ 1,1 0,0 @@
-�bsbax`>
\ No newline at end of file
D test/normalization/beta/TextLiteralA.dhallb => test/normalization/beta/TextLiteralA.dhallb +0 -1
@@ 1,1 0,0 @@
-�as>
\ No newline at end of file
D test/normalization/beta/TextLiteralB.dhallb => test/normalization/beta/TextLiteralB.dhallb +0 -1
@@ 1,1 0,0 @@
-�as>
\ No newline at end of file
D test/normalization/beta/TextNormalizeInterpolationsA.dhallb => test/normalization/beta/TextNormalizeInterpolationsA.dhallb +0 -1
@@ 1,1 0,0 @@
-�as��axay`>
\ No newline at end of file
D test/normalization/beta/TextNormalizeInterpolationsB.dhallb => test/normalization/beta/TextNormalizeInterpolationsB.dhallb +0 -1
@@ 1,1 0,0 @@
-�asax`>
\ No newline at end of file
D test/normalization/beta/TextShowA.dhallb => test/normalization/beta/TextShowA.dhallb +0 -1
@@ 1,1 0,0 @@
-iText/show>
\ No newline at end of file
D test/normalization/beta/TextShowAllEscapesA.dhallb => test/normalization/beta/TextShowAllEscapesA.dhallb +0 -0
D test/normalization/beta/TextShowAllEscapesB.dhallb => test/normalization/beta/TextShowAllEscapesB.dhallb +0 -1
@@ 1,1 0,0 @@
-�x("\"\u0024\\\b\f\n\r\tツa\u0007b\u0010c">
\ No newline at end of file
D test/normalization/beta/TextShowB.dhallb => test/normalization/beta/TextShowB.dhallb +0 -1
@@ 1,1 0,0 @@
-iText/show>
\ No newline at end of file
D test/normalization/beta/TrueA.dhallb => test/normalization/beta/TrueA.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/TrueB.dhallb => test/normalization/beta/TrueB.dhallb +0 -1
@@ 1,1 0,0 @@
-�>
\ No newline at end of file
D test/normalization/beta/TypeA.dhallb => test/normalization/beta/TypeA.dhallb +0 -1
@@ 1,1 0,0 @@
-dType>
\ No newline at end of file
D test/normalization/beta/TypeAnnotationA.dhallb => test/normalization/beta/TypeAnnotationA.dhallb +0 -1
@@ 1,1 0,0 @@
-�axaA>
\ No newline at end of file
D test/normalization/beta/TypeAnnotationB.dhallb => test/normalization/beta/TypeAnnotationB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/TypeB.dhallb => test/normalization/beta/TypeB.dhallb +0 -1
@@ 1,1 0,0 @@
-dType>
\ No newline at end of file
D test/normalization/beta/UnionNormalizeAlternativesA.dhallb => test/normalization/beta/UnionNormalizeAlternativesA.dhallb +0 -1
@@ 1,1 0,0 @@
-�axay�ay��aXaY>
\ No newline at end of file
D test/normalization/beta/UnionNormalizeAlternativesB.dhallb => test/normalization/beta/UnionNormalizeAlternativesB.dhallb +0 -1
@@ 1,1 0,0 @@
-�axay�ayaX>
\ No newline at end of file
D test/normalization/beta/UnionNormalizeArgumentsA.dhallb => test/normalization/beta/UnionNormalizeArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-�ax��ayaz�>
\ No newline at end of file
D test/normalization/beta/UnionNormalizeArgumentsB.dhallb => test/normalization/beta/UnionNormalizeArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-�axay�>
\ No newline at end of file
D test/normalization/beta/UnionProjectConstructorA.dhallb => test/normalization/beta/UnionProjectConstructorA.dhallb +0 -1
@@ 1,1 0,0 @@
-� ��axaTax>
\ No newline at end of file
D test/normalization/beta/UnionProjectConstructorB.dhallb => test/normalization/beta/UnionProjectConstructorB.dhallb +0 -1
@@ 1,1 0,0 @@
-�axaT�axax�>
\ No newline at end of file
D test/normalization/beta/UnionProjectConstructorNormalizeArgumentsA.dhallb => test/normalization/beta/UnionProjectConstructorNormalizeArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-� ��ayazax>
\ No newline at end of file
D test/normalization/beta/UnionProjectConstructorNormalizeArgumentsB.dhallb => test/normalization/beta/UnionProjectConstructorNormalizeArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-� ayax>
\ No newline at end of file
D test/normalization/beta/UnionSortAlternativesA.dhallb => test/normalization/beta/UnionSortAlternativesA.dhallb +0 -1
@@ 1,1 0,0 @@
-�axay�ayaBazaA>
\ No newline at end of file
D test/normalization/beta/UnionSortAlternativesB.dhallb => test/normalization/beta/UnionSortAlternativesB.dhallb +0 -1
@@ 1,1 0,0 @@
-�axay�ayaBazaA>
\ No newline at end of file
D test/normalization/beta/UnionTypeA.dhallb => test/normalization/beta/UnionTypeA.dhallb +0 -1
@@ 1,1 0,0 @@
-��axaBazaA>
\ No newline at end of file
D test/normalization/beta/UnionTypeB.dhallb => test/normalization/beta/UnionTypeB.dhallb +0 -1
@@ 1,1 0,0 @@
-��axaBazaA>
\ No newline at end of file
D test/normalization/beta/UnionTypeEmptyA.dhallb => test/normalization/beta/UnionTypeEmptyA.dhallb +0 -1
@@ 1,1 0,0 @@
-��>
\ No newline at end of file
D test/normalization/beta/UnionTypeEmptyB.dhallb => test/normalization/beta/UnionTypeEmptyB.dhallb +0 -1
@@ 1,1 0,0 @@
-��>
\ No newline at end of file
D test/normalization/beta/UnionTypeNormalizeArgumentsA.dhallb => test/normalization/beta/UnionTypeNormalizeArgumentsA.dhallb +0 -1
@@ 1,1 0,0 @@
-��ax��aBaZazaA>
\ No newline at end of file
D test/normalization/beta/UnionTypeNormalizeArgumentsB.dhallb => test/normalization/beta/UnionTypeNormalizeArgumentsB.dhallb +0 -1
@@ 1,1 0,0 @@
-��axaBazaA>
\ No newline at end of file
D test/normalization/beta/VariableA.dhallb => test/normalization/beta/VariableA.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/beta/VariableB.dhallb => test/normalization/beta/VariableB.dhallb +0 -1
@@ 1,1 0,0 @@
-ax>
\ No newline at end of file
D test/normalization/dhall-encode => test/normalization/dhall-encode +0 -3
@@ 1,3 0,0 @@
-#!/bin/sh
-
-dhall encode < "$1" > "$1"b
D test/normalization/dhall-hash => test/normalization/dhall-hash +0 -7
@@ 1,7 0,0 @@
-#!/bin/sh
-
-out="$(echo "$1" | sed -e's/\.dhallb$/.hash/')"
-dhall decode < "$1" | dhall hash > "$out" 2>/dev/null
-if [ $(wc -c < "$out") -eq 0 ]; then
- rm -f "$out"
-fi
D test/normalization/gen => test/normalization/gen +0 -9
@@ 1,9 0,0 @@
-#!/bin/sh
-
-cp -r "$(git root)"/dhall-lang/tests/normalization/success "$(git root)"/test/normalization/standard
-
-cd "$(git root)"/test/normalization/standard
-find . -name '*.dhall' -exec "$(git root)"/test/normalization/dhall-encode '{}' \;
-
-cd "$(git root)"/test/normalization
-find . -name '*.dhallb' -exec "$(git root)"/test/normalization/dhall-hash '{}' \;
D test/normalization/standard/.gitignore => test/normalization/standard/.gitignore +0 -2
@@ 1,2 0,0 @@
-*.dhall
-*.dhallb
M test/test_as_json.rb => test/test_as_json.rb +5 -3
@@ 9,14 9,16 @@ require "dhall/binary"
class TestAsJson < Minitest::Test
DIRPATH = Pathname.new(File.dirname(__FILE__))
- TESTS = DIRPATH + "normalization/"
+ TESTS = DIRPATH + "../dhall-lang/tests/**/success/"
Pathname.glob(TESTS + "**/*.dhallb").each do |path|
test = path.relative_path_from(TESTS).to_s.sub(/.dhallb$/, "")
define_method("test_#{test}") do
+ skip "double as_json" if test =~ /doubleB/
+ skip "deprecated syntax" if test =~ /collectionImportTypeB|annotationsB/
assert_equal(
- CBOR.decode(path.read).inspect,
- Dhall.from_binary(path.read).as_json.inspect
+ CBOR.decode(path.read),
+ Dhall.from_binary(path.read).as_json
)
end
end
M test/test_binary.rb => test/test_binary.rb +1 -1
@@ 8,7 8,7 @@ require "dhall/binary"
class TestBinary < Minitest::Test
DIRPATH = Pathname.new(File.dirname(__FILE__))
- TESTS = DIRPATH + "normalization/"
+ TESTS = DIRPATH + "../dhall-lang/tests/**/success/"
Pathname.glob(TESTS + "**/*.dhallb").each do |path|
test = path.relative_path_from(TESTS).to_s.sub(/.dhallb$/, "")
M test/test_normalization.rb => test/test_normalization.rb +8 -8
@@ 4,26 4,26 @@ require "minitest/autorun"
require "pathname"
require "dhall/ast"
-require "dhall/binary"
+require "dhall/parser"
require "dhall/normalize"
class TestNormalization < Minitest::Test
DIRPATH = Pathname.new(File.dirname(__FILE__))
- TESTS = DIRPATH + "normalization/"
+ TESTS = DIRPATH + "../dhall-lang/tests/{α-,}normalization/"
- Pathname.glob(TESTS + "**/*A.dhallb").each do |path|
- test = path.relative_path_from(TESTS).to_s.sub(/A\.dhallb$/, "")
+ Pathname.glob(TESTS + "success/**/*A.dhall").each do |path|
+ test = path.relative_path_from(TESTS).to_s.sub(/A\.dhall$/, "")
next if test =~ /prelude\//
next if test =~ /remoteSystems/
next if test =~ /multiline\//
define_method("test_#{test}") do
- Dhall::Function.disable_alpha_normalization! if test =~ /^standard\//
+ Dhall::Function.disable_alpha_normalization! if test !~ /α/
assert_equal(
- Dhall.from_binary((TESTS + "#{test}B.dhallb").binread),
- Dhall.from_binary(path.binread).normalize
+ Dhall::Parser.parse_file(TESTS + "#{test}B.dhall").value,
+ Dhall::Parser.parse_file(path).value.normalize
)
- Dhall::Function.enable_alpha_normalization! if test =~ /^standard\//
+ Dhall::Function.enable_alpha_normalization! if test !~ /α/
end
end
A test/test_parser.rb => test/test_parser.rb +36 -0
@@ 0,0 1,36 @@
+# frozen_string_literal: true
+
+require "minitest/autorun"
+require "pathname"
+
+require "dhall/parser"
+require "dhall/binary"
+
+class TestParser < Minitest::Test
+ DIRPATH = Pathname.new(File.dirname(__FILE__))
+ TESTS = DIRPATH + "../dhall-lang/tests/parser/"
+
+ Pathname.glob(TESTS + "success/**/*A.dhall").each do |path|
+ test = path.relative_path_from(TESTS).to_s.sub(/A\.dhall$/, "")
+ define_method("test_#{test}") do
+ skip "very slow" if !ENV["CI"] && test =~ /largeExpression/
+ skip "deprecated syntax" if test =~ /collectionImportType|annotations/
+ match = Dhall::Parser.parse_file(path)
+ assert(match)
+ assert_kind_of(Dhall::Expression, match.value)
+ assert_equal(
+ (TESTS + "#{test}B.dhallb").binread,
+ match.value.to_binary
+ )
+ end
+ end
+
+ Pathname.glob(TESTS + "failure/**/*.dhall").each do |path|
+ test = path.relative_path_from(TESTS).to_s.sub(/A\.dhall$/, "")
+ define_method("test_#{test}") do
+ assert_raises Citrus::ParseError do
+ Dhall::Parser.parse_file(path).value
+ end
+ end
+ end
+end
M test/test_resolvers.rb => test/test_resolvers.rb +4 -4
@@ 39,7 39,7 @@ class TestResolvers < Minitest::Test
sources.map { |source| Promise.resolve(source) }
end
)
- source = Dhall::Import::Http.new(nil, "example.com", "x.dhall", nil, nil)
+ source = Dhall::Import::Http.new(nil, "example.com", "x.dhall", nil)
promise = source.resolve(resolver)
resolver.finish!
assert_equal source, promise.sync
@@ 51,7 51,7 @@ class TestResolvers < Minitest::Test
sources.map { |source| Promise.resolve(source) }
end
)
- source = Dhall::Import::Https.new(nil, "example.com", "x.dhall", nil, nil)
+ source = Dhall::Import::Https.new(nil, "example.com", "x.dhall", nil)
promise = source.resolve(resolver)
resolver.finish!
assert_equal source, promise.sync
@@ 63,7 63,7 @@ class TestResolvers < Minitest::Test
sources.map { |source| Promise.resolve(source) }
end
)
- source = Dhall::Import::Https.new(nil, "example.com", "x.dhall", nil, nil)
+ source = Dhall::Import::Https.new(nil, "example.com", "x.dhall", nil)
promise = source.resolve(resolver)
resolver.finish!
assert_equal source, promise.sync
@@ 71,7 71,7 @@ class TestResolvers < Minitest::Test
def test_local_only_resolver_rejects_http
resolver = Dhall::Resolvers::LocalOnly.new
- source = Dhall::Import::Http.new(nil, "example.com", "x.dhall", nil, nil)
+ source = Dhall::Import::Http.new(nil, "example.com", "x.dhall", nil)
promise = source.resolve(resolver)
resolver.finish!
assert_raises Dhall::ImportBannedException do
M test/test_suite.rb => test/test_suite.rb +1 -0
@@ 4,5 4,6 @@ require "pathname"
DIRPATH = Pathname.new(File.dirname(__FILE__))
Pathname.glob(DIRPATH + "test_*.rb").each do |path|
+ next if path.basename.to_s == "test_suite.rb"
require_relative path.basename
end