fix: don't crash validation on invalid types (#1208)

This commit is contained in:
Scott Olsen 2021-05-22 17:44:40 -04:00 committed by GitHub
parent 4b4db25984
commit 20302c9f79
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -26,7 +26,7 @@ validateMemberCases typeEnv typeVariables rest = mapM_ visit rest
validateMembers :: TypeEnv -> [Ty] -> [XObj] -> Either TypeError ()
validateMembers typeEnv typeVariables membersXObjs =
checkUnevenMembers >> checkDuplicateMembers >> checkKindConsistency >> checkMembers
checkUnevenMembers >> checkDuplicateMembers >> checkMembers >> checkKindConsistency
where
pairs = pairwise membersXObjs
-- Are the number of members even?
@ -52,6 +52,8 @@ validateMembers typeEnv typeVariables membersXObjs =
Left var -> Left (InconsistentKinds var membersXObjs)
_ -> pure ()
where
-- fromJust is safe here; invalid types will be caught in the prior check.
-- todo? be safer anyway?
varsOnly = filter isTypeGeneric (map (fromJust . xobjToTy . snd) pairs)
checkMembers :: Either TypeError ()
checkMembers = mapM_ (okXObjForType typeEnv typeVariables . snd) pairs