Improve isReflexiveCo performance
authorTobias Dammers <tdammers@gmail.com>
Thu, 29 Mar 2018 08:45:54 +0000 (10:45 +0200)
committerTobias Dammers <tdammers@gmail.com>
Sun, 15 Apr 2018 11:30:20 +0000 (13:30 +0200)
compiler/types/Coercion.hs

index c8105d0..b6de283 100644 (file)
@@ -435,7 +435,9 @@ isReflCo_maybe _           = Nothing
 -- | Slowly checks if the coercion is reflexive. Don't call this in a loop,
 -- as it walks over the entire coercion.
 isReflexiveCo :: Coercion -> Bool
-isReflexiveCo = isJust . isReflexiveCo_maybe
+isReflexiveCo (Refl {}) = True
+isReflexiveCo co = eqType ty1 ty2
+  where Pair ty1 ty2 = coercionKind co
 
 -- | Extracts the coerced type from a reflexive coercion. This potentially
 -- walks over the entire coercion, so avoid doing this in a loop.