Add INLINE pragmas
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Thu, 26 Jan 2012 20:35:57 +0000 (20:35 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Thu, 26 Jan 2012 20:35:57 +0000 (20:35 +0000)
Control/Monad/Primitive.hs

index b16142c..37b22fd 100644 (file)
@@ -50,37 +50,47 @@ instance PrimMonad IO where
   type PrimState IO = RealWorld
   primitive = IO
   internal (IO p) = p
+  {-# INLINE primitive #-}
+  {-# INLINE internal #-}
 
 instance PrimMonad (ST s) where
   type PrimState (ST s) = s
   primitive = ST
   internal (ST p) = p
+  {-# INLINE primitive #-}
+  {-# INLINE internal #-}
 
 -- | Convert a 'PrimMonad' to another monad with the same state token.
 primToPrim :: (PrimMonad m1, PrimMonad m2, PrimState m1 ~ PrimState m2)
         => m1 a -> m2 a
+{-# INLINE primToPrim #-}
 primToPrim m = primitive (internal m)
 
 -- | Convert a 'PrimMonad' with a 'RealWorld' state token to 'IO'
 primToIO :: (PrimMonad m, PrimState m ~ RealWorld) => m a -> IO a
+{-# INLINE primToIO #-}
 primToIO = primToPrim
 
 -- | Convert a 'PrimMonad' to 'ST'
 primToST :: PrimMonad m => m a -> ST (PrimState m) a
+{-# INLINE primToST #-}
 primToST = primToPrim
 
 -- | Convert a 'PrimMonad' to another monad with a possibly different state
 -- token. This operation is highly unsafe!
 unsafePrimToPrim :: (PrimMonad m1, PrimMonad m2) => m1 a -> m2 a
+{-# INLINE unsafePrimToPrim #-}
 unsafePrimToPrim m = primitive (unsafeCoerce# (internal m))
 
 -- | Convert any 'PrimMonad' to 'ST' with an arbitrary state token. This
 -- operation is highly unsafe!
 unsafePrimToST :: PrimMonad m => m a -> ST s a
+{-# INLINE unsafePrimToST #-}
 unsafePrimToST = unsafePrimToPrim
 
 -- | Convert any 'PrimMonad' to 'IO'. This operation is highly unsafe!
 unsafePrimToIO :: PrimMonad m => m a -> IO a
+{-# INLINE unsafePrimToIO #-}
 unsafePrimToIO = unsafePrimToPrim
 
 unsafeInlinePrim :: PrimMonad m => m a -> a
@@ -96,6 +106,7 @@ unsafeInlineST :: ST s a -> a
 unsafeInlineST = unsafeInlinePrim
 
 touch :: PrimMonad m => a -> m ()
+{-# INLINE touch #-}
 touch x = unsafePrimToPrim
         $ (primitive (\s -> case touch# x s of { s' -> (# s', () #) }) :: IO ())