import Control.Arrow (Arrow(arr, (&&&)), ArrowZero(zeroArrow), ArrowPlus((<+>)))
import Control.Monad (liftM, ap, MonadPlus(..))
import Control.Monad.Instances ()
+#ifndef __NHC__
import Control.Monad.ST (ST)
import qualified Control.Monad.ST.Lazy as Lazy (ST)
+#endif
import Data.Functor ((<$>), (<$))
import Data.Monoid (Monoid(..))
pure = return
(<*>) = ap
+#ifndef __NHC__
instance Applicative (ST s) where
pure = return
(<*>) = ap
instance Applicative (Lazy.ST s) where
pure = return
(<*>) = ap
+#endif
#ifdef __GLASGOW_HASKELL__
instance Applicative STM where