Let tfvec_len and tfvec_elem give a proper error message.
authorMatthijs Kooijman <m.kooijman@student.utwente.nl>
Thu, 25 Jun 2009 08:40:40 +0000 (10:40 +0200)
committerMatthijs Kooijman <m.kooijman@student.utwente.nl>
Thu, 25 Jun 2009 08:40:40 +0000 (10:40 +0200)
CoreTools.hs

index b08f3ce9897d65b607c14a7ed3db2ed8eca195ad..c797bb7581fa3b615af426e1693f4ff6303235ae 100644 (file)
@@ -27,8 +27,10 @@ import qualified Unique
 import qualified CoreUtils
 import qualified CoreFVs
 
+-- Local imports
 import GhcTools
 import HsTools
+import Pretty
 
 -- | Evaluate a core Type representing type level int from the tfp
 -- library to a real int.
@@ -92,15 +94,19 @@ ranged_word_bound ty =
 tfvec_len :: Type.Type -> Int
 tfvec_len ty =
   eval_tfp_int len
-  where 
-    (tycon, args) = Type.splitTyConApp ty
+  where  
+    args = case Type.splitTyConApp_maybe ty of
+      Just (tycon, args) -> args
+      Nothing -> error $ "CoreTools.tfvec_len Not a vector type: " ++ (pprString ty)
     [len, el_ty] = args
     
 -- | Get the element type of a TFVec type
 tfvec_elem :: Type.Type -> Type.Type
 tfvec_elem ty = el_ty
   where
-    (tycon, args) = Type.splitTyConApp ty
+    args = case Type.splitTyConApp_maybe ty of
+      Just (tycon, args) -> args
+      Nothing -> error $ "CoreTools.tfvec_len Not a vector type: " ++ (pprString ty)
     [len, el_ty] = args
 
 -- Is this a wild binder?