[project @ 1999-07-26 15:37:41 by simonpj]
authorsimonpj <unknown>
Mon, 26 Jul 1999 15:37:41 +0000 (15:37 +0000)
committersimonpj <unknown>
Mon, 26 Jul 1999 15:37:41 +0000 (15:37 +0000)
Make Type.isUnLiftedType return True for forall'd unlifted types:
e.g. x :: forall a. Int#

I found bindings like these were getting floated to the top level.
They are pretty bogus types, mind you.  It would be better never to
construct them.

(George Russell tripped over this one.)

ghc/compiler/types/Type.lhs

index bd502b5..8271ce3 100644 (file)
@@ -835,9 +835,16 @@ isUnboxedType :: Type -> Bool
 isUnboxedType ty = not (isFollowableRep (typePrimRep ty))
 
 isUnLiftedType :: Type -> Bool
-isUnLiftedType ty = case splitTyConApp_maybe ty of
-                          Just (tc, ty_args) -> isUnLiftedTyCon tc
-                          other              -> False
+       -- isUnLiftedType returns True for forall'd unlifted types:
+       --      x :: forall a. Int#
+       -- I found bindings like these were getting floated to the top level.
+       -- They are pretty bogus types, mind you.  It would be better never to
+       -- construct them
+
+isUnLiftedType (ForAllTy tv ty) = isUnLiftedType ty
+isUnLiftedType (NoteTy _ ty)   = isUnLiftedType ty
+isUnLiftedType (TyConApp tc _)  = isUnLiftedTyCon tc
+isUnLiftedType other           = False
 
 isUnboxedTupleType :: Type -> Bool
 isUnboxedTupleType ty = case splitTyConApp_maybe ty of