(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(..))
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