summaryrefslogtreecommitdiff
path: root/dhall/src/error
diff options
context:
space:
mode:
authorFintanH2019-08-01 16:26:10 +0100
committerFintanH2019-08-01 16:26:10 +0100
commitfc309bf41dfe53d043766ec9d468389b2b4269ae (patch)
tree5b23c385d28bde36ef2b7a4e5db1c4549c669fdd /dhall/src/error
parent2a6a37398394a33e281fa4f2055a3b33c21502c3 (diff)
Add typechecking for RecursiveRecordTypeMerge.
The implementation brings with it intersection_with_key over HashMaps to help with the type checking of records of records. The implementation first checks that the Const values line up with the LHS and RHS. Then checks that combining the records does not result in a FieldCollision. It will finally return the shared Const type of the arguments.
Diffstat (limited to 'dhall/src/error')
-rw-r--r--dhall/src/error/mod.rs3
1 files changed, 3 insertions, 0 deletions
diff --git a/dhall/src/error/mod.rs b/dhall/src/error/mod.rs
index 125d013..2f65443 100644
--- a/dhall/src/error/mod.rs
+++ b/dhall/src/error/mod.rs
@@ -55,6 +55,7 @@ pub(crate) enum TypeMessage {
TypeMismatch(Typed, Normalized, Typed),
AnnotMismatch(Typed, Normalized),
Untyped,
+ FieldCollision(Label),
InvalidListElement(usize, Normalized, Typed),
InvalidListType(Normalized),
InvalidOptionalType(Normalized),
@@ -80,6 +81,8 @@ pub(crate) enum TypeMessage {
ProjectionMissingEntry,
Sort,
RecordTypeDuplicateField,
+ RecordTypeMergeRequiresRecordType(Type),
+ RecordTypeMismatch(Type, Type, Type, Type),
UnionTypeDuplicateField,
Unimplemented,
}