See discussion on glasgow-haskell-users:
http://www.haskell.org/pipermail/glasgow-haskell-users/2010-April/018740.html
-- The memory may be deallocated using 'free' or 'finalizerFree' when
-- no longer required.
--
+{-# INLINE malloc #-}
malloc :: Storable a => IO (Ptr a)
malloc = doMalloc undefined
where
-- The memory is freed when @f@ terminates (either normally or via an
-- exception), so the pointer passed to @f@ must /not/ be used after this.
--
+{-# INLINE alloca #-}
alloca :: Storable a => (Ptr a -> IO b) -> IO b
alloca = doAlloca undefined
where