extensible-0.9.2: Extensible, efficient, optics-friendly data types and effects
Copyright(c) Fumiaki Kinoshita 2018
LicenseBSD3
MaintainerFumiaki Kinoshita <[email protected]>
Safe HaskellNone
LanguageHaskell2010

Data.Extensible.Tangle

Description

Extensible tangles

Synopsis

Documentation

newtype TangleT (xs :: [k]) (h :: k -> Type) (m :: Type -> Type) a Source #

TangleT h xs m is the monad of computations that may depend on the elements in xs.

Constructors

TangleT 

Fields

Instances

Instances details
MonadTrans (TangleT xs h) Source # 
Instance details

Defined in Data.Extensible.Tangle

Methods

lift :: Monad m => m a -> TangleT xs h m a #

Monad m => Applicative (TangleT xs h m) Source # 
Instance details

Defined in Data.Extensible.Tangle

Methods

pure :: a -> TangleT xs h m a #

(<*>) :: TangleT xs h m (a -> b) -> TangleT xs h m a -> TangleT xs h m b #

liftA2 :: (a -> b -> c) -> TangleT xs h m a -> TangleT xs h m b -> TangleT xs h m c #

(*>) :: TangleT xs h m a -> TangleT xs h m b -> TangleT xs h m b #

(<*) :: TangleT xs h m a -> TangleT xs h m b -> TangleT xs h m a #

Functor m => Functor (TangleT xs h m) Source # 
Instance details

Defined in Data.Extensible.Tangle

Methods

fmap :: (a -> b) -> TangleT xs h m a -> TangleT xs h m b #

(<$) :: a -> TangleT xs h m b -> TangleT xs h m a #

Monad m => Monad (TangleT xs h m) Source # 
Instance details

Defined in Data.Extensible.Tangle

Methods

(>>=) :: TangleT xs h m a -> (a -> TangleT xs h m b) -> TangleT xs h m b #

(>>) :: TangleT xs h m a -> TangleT xs h m b -> TangleT xs h m b #

return :: a -> TangleT xs h m a #

(Monad m, Monoid a) => Monoid (TangleT xs h m a) Source # 
Instance details

Defined in Data.Extensible.Tangle

Methods

mempty :: TangleT xs h m a #

mappend :: TangleT xs h m a -> TangleT xs h m a -> TangleT xs h m a #

mconcat :: [TangleT xs h m a] -> TangleT xs h m a #

(Monad m, Semigroup a) => Semigroup (TangleT xs h m a) Source # 
Instance details

Defined in Data.Extensible.Tangle

Methods

(<>) :: TangleT xs h m a -> TangleT xs h m a -> TangleT xs h m a #

sconcat :: NonEmpty (TangleT xs h m a) -> TangleT xs h m a #

stimes :: Integral b => b -> TangleT xs h m a -> TangleT xs h m a #

lasso :: forall {k1} {v1} (k2 :: k1) (v2 :: v1) (m :: Type -> Type) (h :: Assoc k1 v1 -> Type) (xs :: [Assoc k1 v1]). (Monad m, Lookup xs k2 v2, Wrapper h) => Proxy k2 -> TangleT xs h m (Repr h (k2 ':> v2)) Source #

Hitch an element associated to the FieldName through a wrapper.

hitchAt :: forall {k} (m :: Type -> Type) (xs :: [k]) (x :: k) h. Monad m => Membership xs x -> TangleT xs h m (h x) Source #

Take a value from the tangles. The result is memoized.

runTangleT :: forall {k} m (xs :: [k]) (h :: k -> Type) a. Monad m => (xs :& Compose (TangleT xs h m) h) -> (xs :& Nullable h) -> TangleT xs h m a -> m (a, xs :& Nullable h) Source #

Run a TangleT action and return the result and the calculated values.

evalTangleT :: forall {k} m (xs :: [k]) (h :: k -> Type) a. Monad m => (xs :& Compose (TangleT xs h m) h) -> (xs :& Nullable h) -> TangleT xs h m a -> m a Source #

Run a TangleT action.

runTangles :: forall {k} m (xs :: [k]) (h :: k -> Type). Monad m => (xs :& Compose (TangleT xs h m) h) -> (xs :& Nullable h) -> m (xs :& h) Source #

Run tangles and collect all the results as a Record.