wizard-0.1.1: the fantastical wizard monoid

Safe HaskellNone
LanguageHaskell2010

Wizard

Contents

Synopsis

Documentation

newtype WizardT m a infixr 9 Source #

A Wizard Monoid, based on ideas expressed by Gabriel Gonzalez at http://www.haskellforall.com/2018/02/the-wizard-monoid.html.

One can view this as Compose, specialised to a single functor.

Constructors

WizardT infixr 9 

Fields

Instances
MonadTrans WizardT Source # 
Instance details

Defined in Wizard

Methods

lift :: Monad m => m a -> WizardT m a #

Monad m => Monad (WizardT m) Source # 
Instance details

Defined in Wizard

Methods

(>>=) :: WizardT m a -> (a -> WizardT m b) -> WizardT m b #

(>>) :: WizardT m a -> WizardT m b -> WizardT m b #

return :: a -> WizardT m a #

fail :: String -> WizardT m a #

Functor f => Functor (WizardT f) Source # 
Instance details

Defined in Wizard

Methods

fmap :: (a -> b) -> WizardT f a -> WizardT f b #

(<$) :: a -> WizardT f b -> WizardT f a #

MonadFix m => MonadFix (WizardT m) Source # 
Instance details

Defined in Wizard

Methods

mfix :: (a -> WizardT m a) -> WizardT m a #

(Alternative m, Monad m) => MonadFail (WizardT m) Source # 
Instance details

Defined in Wizard

Methods

fail :: String -> WizardT m a #

Applicative f => Applicative (WizardT f) Source # 
Instance details

Defined in Wizard

Methods

pure :: a -> WizardT f a #

(<*>) :: WizardT f (a -> b) -> WizardT f a -> WizardT f b #

liftA2 :: (a -> b -> c) -> WizardT f a -> WizardT f b -> WizardT f c #

(*>) :: WizardT f a -> WizardT f b -> WizardT f b #

(<*) :: WizardT f a -> WizardT f b -> WizardT f a #

Foldable f => Foldable (WizardT f) Source # 
Instance details

Defined in Wizard

Methods

fold :: Monoid m => WizardT f m -> m #

foldMap :: Monoid m => (a -> m) -> WizardT f a -> m #

foldr :: (a -> b -> b) -> b -> WizardT f a -> b #

foldr' :: (a -> b -> b) -> b -> WizardT f a -> b #

foldl :: (b -> a -> b) -> b -> WizardT f a -> b #

foldl' :: (b -> a -> b) -> b -> WizardT f a -> b #

foldr1 :: (a -> a -> a) -> WizardT f a -> a #

foldl1 :: (a -> a -> a) -> WizardT f a -> a #

toList :: WizardT f a -> [a] #

null :: WizardT f a -> Bool #

length :: WizardT f a -> Int #

elem :: Eq a => a -> WizardT f a -> Bool #

maximum :: Ord a => WizardT f a -> a #

minimum :: Ord a => WizardT f a -> a #

sum :: Num a => WizardT f a -> a #

product :: Num a => WizardT f a -> a #

Traversable t => Traversable (WizardT t) Source # 
Instance details

Defined in Wizard

Methods

traverse :: Applicative f => (a -> f b) -> WizardT t a -> f (WizardT t b) #

sequenceA :: Applicative f => WizardT t (f a) -> f (WizardT t a) #

mapM :: Monad m => (a -> m b) -> WizardT t a -> m (WizardT t b) #

sequence :: Monad m => WizardT t (m a) -> m (WizardT t a) #

MonadIO m => MonadIO (WizardT m) Source # 
Instance details

Defined in Wizard

Methods

liftIO :: IO a -> WizardT m a #

Alternative f => Alternative (WizardT f) Source # 
Instance details

Defined in Wizard

Methods

empty :: WizardT f a #

(<|>) :: WizardT f a -> WizardT f a -> WizardT f a #

some :: WizardT f a -> WizardT f [a] #

many :: WizardT f a -> WizardT f [a] #

(Alternative m, Monad m) => MonadPlus (WizardT m) Source # 
Instance details

Defined in Wizard

Methods

mzero :: WizardT m a #

mplus :: WizardT m a -> WizardT m a -> WizardT m a #

Functor m => Generic1 (WizardT m :: Type -> Type) Source # 
Instance details

Defined in Wizard

Associated Types

type Rep1 (WizardT m) :: k -> Type #

Methods

from1 :: WizardT m a -> Rep1 (WizardT m) a #

to1 :: Rep1 (WizardT m) a -> WizardT m a #

Generic (WizardT m a) Source # 
Instance details

Defined in Wizard

Associated Types

type Rep (WizardT m a) :: Type -> Type #

Methods

from :: WizardT m a -> Rep (WizardT m a) x #

to :: Rep (WizardT m a) x -> WizardT m a #

(Applicative f, Semigroup a) => Semigroup (WizardT f a) Source # 
Instance details

Defined in Wizard

Methods

(<>) :: WizardT f a -> WizardT f a -> WizardT f a #

sconcat :: NonEmpty (WizardT f a) -> WizardT f a #

stimes :: Integral b => b -> WizardT f a -> WizardT f a #

(Applicative f, Monoid a) => Monoid (WizardT f a) Source # 
Instance details

Defined in Wizard

Methods

mempty :: WizardT f a #

mappend :: WizardT f a -> WizardT f a -> WizardT f a #

mconcat :: [WizardT f a] -> WizardT f a #

type Rep1 (WizardT m :: Type -> Type) Source # 
Instance details

Defined in Wizard

type Rep1 (WizardT m :: Type -> Type) = D1 (MetaData "WizardT" "Wizard" "wizard-0.1.1-6vq6fudSuisF5GKsBHVdSl" True) (C1 (MetaCons "WizardT" PrefixI True) (S1 (MetaSel (Just "wand") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (m :.: Rec1 m)))
type Rep (WizardT m a) Source # 
Instance details

Defined in Wizard

type Rep (WizardT m a) = D1 (MetaData "WizardT" "Wizard" "wizard-0.1.1-6vq6fudSuisF5GKsBHVdSl" True) (C1 (MetaCons "WizardT" PrefixI True) (S1 (MetaSel (Just "wand") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (m (m a)))))

Fantastical use of a Wizard

egg :: (Applicative f, Monoid a) => WizardT f a Source #

O(1) fantastical - construct an empty Wizard.

tadpole :: Applicative f => a -> WizardT f a Source #

O(1) fantastical - construct a singleton Wizard.

transform :: Functor f => (a -> b) -> WizardT f a -> WizardT f b Source #

Map over a Wizard in a fantastical manner.

essence :: Monad m => WizardT m a -> m a Source #

Get the input (essence) out of the Wizard.

leviosa :: Monad m => m a -> WizardT m a Source #

Lift an input into a Wizard.

summon :: Monad m => (a -> WizardT m b) -> m a -> WizardT m b Source #

Summon a Wizard out of a monad using a conjuring spell.

 (>>=) = flip summon . essence

sageMode :: forall m t a b. (Monad m, Foldable t, Monoid a, Monoid b) => (a -> WizardT m b) -> t a -> m b Source #

Run an action over a collection of inputs fantastically.

This is like 'Beast Mode', but specialised to Wizards.

Boring use of a Wizard

empty :: (Applicative f, Monoid a) => WizardT f a Source #

O(1) boring - construct an empty Wizard.

singleton :: Applicative f => a -> WizardT f a Source #

O(1) boring - construct a singleton Wizard.

mapWizard :: Functor f => (a -> b) -> WizardT f a -> WizardT f b Source #

Map over a Wizard in a boring manner.

foldWizard :: forall m t a b. (Monad m, Foldable t, Monoid a, Monoid b) => (a -> WizardT m b) -> t a -> m b Source #

Run an action over a collection of inputs.