Safe Haskell | None |
---|---|
Language | Haskell2010 |
Control.Variadic
Synopsis
- newtype VariadicT args (m :: * -> *) a = VariadicT {
- unVariadicT :: Variadic args (m a)
- toVariadicT :: (ToVariadic x, args ~ ToVariadicArgs x, m r ~ ToVariadicReturn x) => x -> VariadicT args m r
- fromVariadicT :: FromVariadic args (m r) => VariadicT args m r -> FromVariadicSignature args (m r)
- newtype Variadic args a = Variadic {
- runVariadic :: Varargs args -> a
- type family ToVariadicArgs x :: [*] where ...
- type family ToVariadicReturn x :: * where ...
- class ToVariadic x where
- toVariadic :: x -> Variadic (ToVariadicArgs x) (ToVariadicReturn x)
- type family FromVariadicSignature (args :: [*]) (r :: *) :: * where ...
- class FromVariadic args r where
- fromVariadic :: Variadic args r -> FromVariadicSignature args r
- type IsVariadic x args r = (ToVariadic x, args ~ ToVariadicArgs x, r ~ ToVariadicReturn x, x ~ FromVariadicSignature args r, FromVariadic args r)
- vmap :: (Functor f, IsVariadic va args (f a), IsVariadic vb args (f b)) => (a -> b) -> va -> vb
- (<$>...) :: (Functor f, IsVariadic va args (f a), IsVariadic vb args (f b)) => (a -> b) -> va -> vb
- vvoid :: (Functor f, IsVariadic va args (f a), IsVariadic vu args (f ())) => va -> vu
- (...*>) :: (Applicative m, IsVariadic va args (m a), IsVariadic vb args (m b)) => va -> vb -> vb
- (<*...) :: (Applicative m, IsVariadic va args (m a), IsVariadic vb args (m b)) => va -> vb -> va
- (...>>=) :: (Monad m, IsVariadic va args (m a), IsVariadic vb args (m b)) => va -> (a -> vb) -> vb
- (=<<...) :: (Monad m, IsVariadic va args (m a), IsVariadic vb args (m b)) => (a -> vb) -> va -> vb
- vhoist :: (Monad f, IsVariadic vf args (f a), IsVariadic vg args (g a)) => (forall x. f x -> g x) -> vf -> vg
Documentation
newtype VariadicT args (m :: * -> *) a Source #
Same as Variadic
but captures the higher-kinded type parameter in the
return type. Useful so we can use Monad
and friends with Variadic
functions.
Constructors
VariadicT | |
Fields
|
Instances
MMonad (VariadicT args) Source # | |
MonadTrans (VariadicT args) Source # | |
Defined in Control.Variadic | |
MFunctor (VariadicT args :: (Type -> Type) -> Type -> Type) Source # | |
Monad m => Monad (VariadicT args m) Source # | |
Functor m => Functor (VariadicT args m) Source # | |
Applicative m => Applicative (VariadicT args m) Source # | |
Defined in Control.Variadic Methods pure :: a -> VariadicT args m a # (<*>) :: VariadicT args m (a -> b) -> VariadicT args m a -> VariadicT args m b # liftA2 :: (a -> b -> c) -> VariadicT args m a -> VariadicT args m b -> VariadicT args m c # (*>) :: VariadicT args m a -> VariadicT args m b -> VariadicT args m b # (<*) :: VariadicT args m a -> VariadicT args m b -> VariadicT args m a # |
toVariadicT :: (ToVariadic x, args ~ ToVariadicArgs x, m r ~ ToVariadicReturn x) => x -> VariadicT args m r Source #
Converts a function to a VariadicT
. Analogous to toVariadic
.
fromVariadicT :: FromVariadic args (m r) => VariadicT args m r -> FromVariadicSignature args (m r) Source #
Converts a VariadicT
to a normal function. Analogous to fromVariadic
.
newtype Variadic args a Source #
A function whose argument list is collapsed into Varargs
and shows its return type.
Constructors
Variadic | |
Fields
|
type family ToVariadicArgs x :: [*] where ... Source #
Resolves the argument list for a function of arbitrary arity.
Equations
ToVariadicArgs (i -> o) = i ': ToVariadicArgs o | |
ToVariadicArgs a = '[] |
type family ToVariadicReturn x :: * where ... Source #
Resolves the return type for a function of arbitrary arity.
Equations
ToVariadicReturn (i -> o) = ToVariadicReturn o | |
ToVariadicReturn a = a |
class ToVariadic x where Source #
Converts a function of arbitrary arity to Variadic
.
Methods
toVariadic :: x -> Variadic (ToVariadicArgs x) (ToVariadicReturn x) Source #
Instances
(ToVariadicArgs a ~ ('[] :: [Type]), ToVariadicReturn a ~ a) => ToVariadic a Source # | |
Defined in Control.Variadic Methods toVariadic :: a -> Variadic (ToVariadicArgs a) (ToVariadicReturn a) Source # | |
(ToVariadic o, ToVariadicArgs (i -> o) ~ (i ': args), ToVariadicArgs o ~ args, ToVariadicReturn (i -> o) ~ ToVariadicReturn o) => ToVariadic (i -> o) Source # | |
Defined in Control.Variadic Methods toVariadic :: (i -> o) -> Variadic (ToVariadicArgs (i -> o)) (ToVariadicReturn (i -> o)) Source # |
type family FromVariadicSignature (args :: [*]) (r :: *) :: * where ... Source #
Builds a function signature given the args
and return type r
.
Equations
FromVariadicSignature '[] r = r | |
FromVariadicSignature (arg ': args) r = arg -> FromVariadicSignature args r |
class FromVariadic args r where Source #
Converts a Variadic
to a normal function.
Methods
fromVariadic :: Variadic args r -> FromVariadicSignature args r Source #
Instances
FromVariadic ('[] :: [Type]) a Source # | |
Defined in Control.Variadic Methods fromVariadic :: Variadic '[] a -> FromVariadicSignature '[] a Source # | |
FromVariadic args a => FromVariadic (arg ': args) a Source # | |
Defined in Control.Variadic Methods fromVariadic :: Variadic (arg ': args) a -> FromVariadicSignature (arg ': args) a Source # |
type IsVariadic x args r = (ToVariadic x, args ~ ToVariadicArgs x, r ~ ToVariadicReturn x, x ~ FromVariadicSignature args r, FromVariadic args r) Source #
Convenience constraint enabling variadic.
x
is the Haskell function type,
args
is a type-level list of arguments,
r
is the return type.
Usually you'll want to use these type arguments polymorphically, e.g. -
(...*>) :: ( Applicative m , IsVariadic va args (m a) , IsVariadic vb args (m b) ) => va -> vb -> vb va ...*> vb = fromVariadicT $ toVariadicT va *> toVariadicT vb
vmap :: (Functor f, IsVariadic va args (f a), IsVariadic vb args (f b)) => (a -> b) -> va -> vb Source #
(<$>...) :: (Functor f, IsVariadic va args (f a), IsVariadic vb args (f b)) => (a -> b) -> va -> vb Source #
vvoid :: (Functor f, IsVariadic va args (f a), IsVariadic vu args (f ())) => va -> vu Source #
(...*>) :: (Applicative m, IsVariadic va args (m a), IsVariadic vb args (m b)) => va -> vb -> vb Source #
(<*...) :: (Applicative m, IsVariadic va args (m a), IsVariadic vb args (m b)) => va -> vb -> va Source #
(...>>=) :: (Monad m, IsVariadic va args (m a), IsVariadic vb args (m b)) => va -> (a -> vb) -> vb Source #
(=<<...) :: (Monad m, IsVariadic va args (m a), IsVariadic vb args (m b)) => (a -> vb) -> va -> vb Source #
vhoist :: (Monad f, IsVariadic vf args (f a), IsVariadic vg args (g a)) => (forall x. f x -> g x) -> vf -> vg Source #