@@ -192,7 +192,7 @@ entails :: ModuleName -> [TypeClassDictionaryInScope] -> (Qualified ProperName,
192entails moduleName context goal@(className, ty) = do
192entails moduleName context goal@(className, ty) = do
193 env <- getEnv
193 env <- getEnv
194 case go env goal of
194 case go env goal of
195− [] -> throwError $ "No " ++ show className ++ " instance found for " ++ prettyPrintType ty
195+ [] -> throwError $ "No " ++ show className ++ " instance found for " ++ show context
196 (dict : _) -> return dict
196 (dict : _) -> return dict
198 go env (className', ty') =
198 go env (className', ty') =
@@ -213,7 +213,8 @@ typeHeadsAreEqual _ _ String String = Just []
213typeHeadsAreEqual _ _ Number Number = Just []
213typeHeadsAreEqual _ _ Number Number = Just []
214typeHeadsAreEqual _ _ Boolean Boolean = Just []
214typeHeadsAreEqual _ _ Boolean Boolean = Just []
215typeHeadsAreEqual _ _ (Skolem s1) (Skolem s2) | s1 == s2 = Just []
215typeHeadsAreEqual _ _ (Skolem s1) (Skolem s2) | s1 == s2 = Just []
216−typeHeadsAreEqual m e (Array ty1) (Array ty2) = typeHeadsAreEqual m e ty1 ty2
216+typeHeadsAreEqual m e (Array (TypeVar v)) (Array ty) = Just [(v, ty)]
217+typeHeadsAreEqual m e (Array ty) (Array (TypeVar v)) = Just [(v, ty)]
217typeHeadsAreEqual m e (TypeConstructor c1) (TypeConstructor c2) | typeConstructorsAreEqual e m c1 c2 = Just []
218typeHeadsAreEqual m e (TypeConstructor c1) (TypeConstructor c2) | typeConstructorsAreEqual e m c1 c2 = Just []
218typeHeadsAreEqual m e (TypeApp h1 (TypeVar v)) (TypeApp h2 arg) = (:) (v, arg) <$> typeHeadsAreEqual m e h1 h2
219typeHeadsAreEqual m e (TypeApp h1 (TypeVar v)) (TypeApp h2 arg) = (:) (v, arg) <$> typeHeadsAreEqual m e h1 h2
219typeHeadsAreEqual m e t1@(TypeApp _ _) t2@(TypeApp _ (TypeVar _)) = typeHeadsAreEqual m e t2 t1
220typeHeadsAreEqual m e t1@(TypeApp _ _) t2@(TypeApp _ (TypeVar _)) = typeHeadsAreEqual m e t2 t1