diff --git a/ghc/lib/std/Monad.lhs b/ghc/lib/std/Monad.lhs
index 2be1dba4394fc8d849baf7ca7e31dc80083cda00..1421209e2eaedbdb15ca583a7c28ac9d60f1dd53 100644
--- a/ghc/lib/std/Monad.lhs
+++ b/ghc/lib/std/Monad.lhs
@@ -58,14 +58,17 @@ guard p         =  if p then return () else zero
 
 -- This subsumes the list-based filter function.
 
+{-# SPECIALISE filter :: (a -> Bool) -> [a] -> [a] #-}
 filter          :: MonadZero m => (a -> Bool) -> m a -> m a
 filter p        =  applyM (\x -> if p x then return x else zero)
 
 -- This subsumes the list-based concat function.
 
+{-# SPECIALISE concat :: [[a]] -> [a] #-}
 concat          :: MonadPlus m => [m a] -> m a
 concat          =  foldr (++) zero
  
+{-# SPECIALISE applyM :: (a -> [b]) -> [a] -> [b] #-}
 applyM          :: Monad m => (a -> m b) -> m a -> m b
 applyM f x      =  x >>= f
 \end{code}