monad-ideals-0.1.0.0: Ideal Monads and coproduct of them
Copyright(C) 2008 Edward Kmett (C) 2024 Koji Miyazato
LicenseBSD-style (see the file LICENSE)
MaintainerKoji Miyazato <viercc@gmail.com>
Stabilityexperimental
Portabilityportable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Control.Monad.Isolated

Description

 
Synopsis

Impure part isolated from a Monad

class Functor m0 => Isolated m0 where Source #

Isolated m0 is a Functor which can be thought of as an impure part of a Monad.

Examples

  • NotOne is Isolated by being the list monad ('[]') minus singleton lists, the pure part of the list monad.

Non-example

Not every Monad can be isolated its pure and impure parts as the sum of functors. For example, the reader monad cannot be written as a sum of two functors.

Laws

impureBind must be implemented so that the Monad (Unite m0) instance derived from it is lawful.

return a = Unite (Left a)

Unite (Left a) >>= k = k a
Unite (Right ma) >>= k = ma `impureBind` k

Translating the Monad laws on Unite m0 in terms of impureBind, the following equations are the Isolated laws on its own.

  • (Right identity)

    ma `impureBind` Unite . Left === Unite (Right ma)
    
  • (Associativity)

    (ma `impureBind` f) `impureBind` g === ma impureBind a -> either g (`impureBind` g) (runUnite fa)
    

Methods

impureBind :: m0 a -> (a -> Unite m0 b) -> Unite m0 b infixl 1 Source #

Instances

Instances details
Isolated NotOne Source # 
Instance details

Defined in Data.List.NotOne

Methods

impureBind :: NotOne a -> (a -> Unite NotOne b) -> Unite NotOne b Source #

Isolated TwoOrMore Source # 
Instance details

Defined in Data.List.TwoOrMore

Methods

impureBind :: TwoOrMore a -> (a -> Unite TwoOrMore b) -> Unite TwoOrMore b Source #

Monad m => Isolated (WrappedMonad m) Source # 
Instance details

Defined in Control.Monad.Isolated

Methods

impureBind :: WrappedMonad m a -> (a -> Unite (WrappedMonad m) b) -> Unite (WrappedMonad m) b Source #

Isolated (Proxy :: Type -> Type) Source # 
Instance details

Defined in Control.Monad.Isolated

Methods

impureBind :: Proxy a -> (a -> Unite Proxy b) -> Unite Proxy b Source #

Isolated (KeepLeft c) Source # 
Instance details

Defined in Data.Functor.KeepLeft

Methods

impureBind :: KeepLeft c a -> (a -> Unite (KeepLeft c) b) -> Unite (KeepLeft c) b Source #

Semigroup s => Isolated ((,) s) Source # 
Instance details

Defined in Control.Monad.Isolated

Methods

impureBind :: (s, a) -> (a -> Unite ((,) s) b) -> Unite ((,) s) b Source #

(Isolated m0, Isolated n0) => Isolated (m0 :+ n0) Source # 
Instance details

Defined in Control.Monad.Coproduct

Methods

impureBind :: (m0 :+ n0) a -> (a -> Unite (m0 :+ n0) b) -> Unite (m0 :+ n0) b Source #

(Re)Unite a Monad from pure and impure parts

newtype Unite f a Source #

Constructors

Unite 

Fields

Instances

Instances details
Foldable g => Foldable (Unite g) Source # 
Instance details

Defined in Control.Monad.Isolated

Methods

fold :: Monoid m => Unite g m -> m #

foldMap :: Monoid m => (a -> m) -> Unite g a -> m #

foldMap' :: Monoid m => (a -> m) -> Unite g a -> m #

foldr :: (a -> b -> b) -> b -> Unite g a -> b #

foldr' :: (a -> b -> b) -> b -> Unite g a -> b #

foldl :: (b -> a -> b) -> b -> Unite g a -> b #

foldl' :: (b -> a -> b) -> b -> Unite g a -> b #

foldr1 :: (a -> a -> a) -> Unite g a -> a #

foldl1 :: (a -> a -> a) -> Unite g a -> a #

toList :: Unite g a -> [a] #

null :: Unite g a -> Bool #

length :: Unite g a -> Int #

elem :: Eq a => a -> Unite g a -> Bool #

maximum :: Ord a => Unite g a -> a #

minimum :: Ord a => Unite g a -> a #

sum :: Num a => Unite g a -> a #

product :: Num a => Unite g a -> a #

Foldable1 g => Foldable1 (Unite g) Source # 
Instance details

Defined in Control.Monad.Isolated

Methods

fold1 :: Semigroup m => Unite g m -> m #

foldMap1 :: Semigroup m => (a -> m) -> Unite g a -> m #

foldMap1' :: Semigroup m => (a -> m) -> Unite g a -> m #

toNonEmpty :: Unite g a -> NonEmpty a #

maximum :: Ord a => Unite g a -> a #

minimum :: Ord a => Unite g a -> a #

head :: Unite g a -> a #

last :: Unite g a -> a #

foldrMap1 :: (a -> b) -> (a -> b -> b) -> Unite g a -> b #

foldlMap1' :: (a -> b) -> (b -> a -> b) -> Unite g a -> b #

foldlMap1 :: (a -> b) -> (b -> a -> b) -> Unite g a -> b #

foldrMap1' :: (a -> b) -> (a -> b -> b) -> Unite g a -> b #

Traversable g => Traversable (Unite g) Source # 
Instance details

Defined in Control.Monad.Isolated

Methods

traverse :: Applicative f => (a -> f b) -> Unite g a -> f (Unite g b) #

sequenceA :: Applicative f => Unite g (f a) -> f (Unite g a) #

mapM :: Monad m => (a -> m b) -> Unite g a -> m (Unite g b) #

sequence :: Monad m => Unite g (m a) -> m (Unite g a) #

Isolated m0 => Applicative (Unite m0) Source # 
Instance details

Defined in Control.Monad.Isolated

Methods

pure :: a -> Unite m0 a #

(<*>) :: Unite m0 (a -> b) -> Unite m0 a -> Unite m0 b #

liftA2 :: (a -> b -> c) -> Unite m0 a -> Unite m0 b -> Unite m0 c #

(*>) :: Unite m0 a -> Unite m0 b -> Unite m0 b #

(<*) :: Unite m0 a -> Unite m0 b -> Unite m0 a #

Functor g => Functor (Unite g) Source # 
Instance details

Defined in Control.Monad.Isolated

Methods

fmap :: (a -> b) -> Unite g a -> Unite g b #

(<$) :: a -> Unite g b -> Unite g a #

Isolated m0 => Monad (Unite m0) Source # 
Instance details

Defined in Control.Monad.Isolated

Methods

(>>=) :: Unite m0 a -> (a -> Unite m0 b) -> Unite m0 b #

(>>) :: Unite m0 a -> Unite m0 b -> Unite m0 b #

return :: a -> Unite m0 a #

Isolated m0 => Apply (Unite m0) Source # 
Instance details

Defined in Control.Monad.Isolated

Methods

(<.>) :: Unite m0 (a -> b) -> Unite m0 a -> Unite m0 b #

(.>) :: Unite m0 a -> Unite m0 b -> Unite m0 b #

(<.) :: Unite m0 a -> Unite m0 b -> Unite m0 a #

liftF2 :: (a -> b -> c) -> Unite m0 a -> Unite m0 b -> Unite m0 c #

Isolated m0 => Bind (Unite m0) Source # 
Instance details

Defined in Control.Monad.Isolated

Methods

(>>-) :: Unite m0 a -> (a -> Unite m0 b) -> Unite m0 b #

join :: Unite m0 (Unite m0 a) -> Unite m0 a #

Traversable1 g => Traversable1 (Unite g) Source # 
Instance details

Defined in Control.Monad.Isolated

Methods

traverse1 :: Apply f => (a -> f b) -> Unite g a -> f (Unite g b) #

sequence1 :: Apply f => Unite g (f b) -> f (Unite g b) #

(Read a, Read (f a)) => Read (Unite f a) Source # 
Instance details

Defined in Control.Monad.Isolated

(Show a, Show (f a)) => Show (Unite f a) Source # 
Instance details

Defined in Control.Monad.Isolated

Methods

showsPrec :: Int -> Unite f a -> ShowS #

show :: Unite f a -> String #

showList :: [Unite f a] -> ShowS #

(Eq a, Eq (f a)) => Eq (Unite f a) Source # 
Instance details

Defined in Control.Monad.Isolated

Methods

(==) :: Unite f a -> Unite f a -> Bool #

(/=) :: Unite f a -> Unite f a -> Bool #

(Ord a, Ord (f a)) => Ord (Unite f a) Source # 
Instance details

Defined in Control.Monad.Isolated

Methods

compare :: Unite f a -> Unite f a -> Ordering #

(<) :: Unite f a -> Unite f a -> Bool #

(<=) :: Unite f a -> Unite f a -> Bool #

(>) :: Unite f a -> Unite f a -> Bool #

(>=) :: Unite f a -> Unite f a -> Bool #

max :: Unite f a -> Unite f a -> Unite f a #

min :: Unite f a -> Unite f a -> Unite f a #

hoistUnite :: (forall a. f a -> g a) -> Unite f b -> Unite g b Source #