{-# LANGUAGE ScopedTypeVariables, Rank2Types #-} {-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-} -- .$Header: c:/Source/Haskell/Wrapper/Data/Flex/RCS/Monad.hs,v 1.1 2010/03/10 01:57:35 dosuser Exp dosuser $ module Data.Flex.Monad where -- import Data.Flex.Applicative (WrapPure(..)) class FWMonad (m :: * -> *) r | m -> r data FWDefaultMonad = FWDefaultMonad data FWReturn t (m :: * -> *) = FWReturn newtype WrapReturn m = WrapReturn {unwrapReturn :: forall a. a -> m a} wrapReturn :: (forall a. a -> m a) -> WrapReturn m wrapReturn = WrapReturn {- GHC 6.6.1 can't cope with this version of unwrapReturn type WrapReturn = WrapPure wrapReturn :: (forall a. a -> m a) -> WrapReturn m wrapReturn = WrapPure unwrapReturn :: WrapReturn m -> (forall a. a -> m a) unwrapReturn = unwrapPure -} data FWBind t (m :: * -> *) = FWBind newtype WrapBind m = WrapBind {unwrapBind :: forall a b. m a -> (a -> m b) -> m b} wrapBind :: (forall a b. m a -> (a -> m b) -> m b) -> WrapBind m wrapBind = WrapBind -- vim: expandtab:tabstop=4:shiftwidth=4