Add Applicative instances for ST monads (proposal #4455)
authorRoss Paterson <ross@soi.city.ac.uk>
Mon, 3 Jan 2011 18:57:22 +0000 (18:57 +0000)
committerRoss Paterson <ross@soi.city.ac.uk>
Mon, 3 Jan 2011 18:57:22 +0000 (18:57 +0000)
patch from Bas van Dijk

Control/Applicative.hs

index 154b591..ab6b365 100644 (file)
@@ -42,6 +42,8 @@ import Control.Arrow
         (Arrow(arr, (&&&)), ArrowZero(zeroArrow), ArrowPlus((<+>)))
 import Control.Monad (liftM, ap, MonadPlus(..))
 import Control.Monad.Instances ()
+import Control.Monad.ST (ST)
+import qualified Control.Monad.ST.Lazy as Lazy (ST)
 import Data.Functor ((<$>), (<$))
 import Data.Monoid (Monoid(..))
 
@@ -149,6 +151,14 @@ instance Applicative IO where
         pure = return
         (<*>) = ap
 
+instance Applicative (ST s) where
+        pure = return
+        (<*>) = ap
+
+instance Applicative (Lazy.ST s) where
+        pure = return
+        (<*>) = ap
+
 #ifdef __GLASGOW_HASKELL__
 instance Applicative STM where
     pure = return