Safe Haskell | None |
---|---|
Language | Haskell98 |
Synopsis
- data T inp out
- lift :: T inp out -> T inp out
- fromSignal :: T out -> T inp out
- ($&) :: T b c -> T a b -> T a c
- (&|&) :: T a b -> T a c -> T a (b, c)
- compile :: T inp out -> T inp out
- compileSignal :: T () out -> T out
- withArgs :: MakeArguments inp => (Arguments (T inp) inp -> T inp out) -> T inp out
- class MakeArguments arg
- type family Arguments (f :: * -> *) arg
- makeArgs :: (MakeArguments arg, Functor f) => f arg -> Arguments f arg
- newtype AnyArg a = AnyArg {
- getAnyArg :: a
- newtype Ground f a = Ground (f a)
- withGroundArgs :: (MakeGroundArguments (T inp) args, GroundArguments args ~ inp) => (args -> T inp out) -> T inp out
- class Functor f => MakeGroundArguments f args
- type family GroundArguments args
- makeGroundArgs :: MakeGroundArguments f args => f (GroundArguments args) -> args
- data Atom a = Atom
- atom :: Atom a
- withGuidedArgs :: (MakeGuidedArguments pat, PatternArguments pat ~ inp) => pat -> (GuidedArguments (T inp) pat -> T inp out) -> T inp out
- class MakeGuidedArguments pat
- type family GuidedArguments (f :: * -> *) pat
- type family PatternArguments pat
- makeGuidedArgs :: (MakeGuidedArguments pat, Functor f) => pat -> f (PatternArguments pat) -> GuidedArguments f pat
- newtype PrepareArguments f merged separated = PrepareArguments (f merged -> separated)
- withPreparedArgs :: PrepareArguments (T inp) inp a -> (a -> T inp out) -> T inp out
- withPreparedArgs2 :: PrepareArguments (T (inp0, inp1)) inp0 a -> PrepareArguments (T (inp0, inp1)) inp1 b -> (a -> b -> T (inp0, inp1) out) -> T (inp0, inp1) out
- atomArg :: PrepareArguments f a (f a)
- stereoArgs :: Functor f => PrepareArguments f a b -> PrepareArguments f (T a) (T b)
- pairArgs :: Functor f => PrepareArguments f a0 b0 -> PrepareArguments f a1 b1 -> PrepareArguments f (a0, a1) (b0, b1)
- tripleArgs :: Functor f => PrepareArguments f a0 b0 -> PrepareArguments f a1 b1 -> PrepareArguments f a2 b2 -> PrepareArguments f (a0, a1, a2) (b0, b1, b2)
Documentation
Instances
Functor (T inp) Source # | |
Applicative (T inp) Source # | |
(Field b, Real b, RationalConstant b) => Fractional (T a b) Source # | |
(PseudoRing b, Real b, IntegerConstant b) => Num (T a b) Source # | |
(Transcendental b, RationalConstant b) => C (T a b) Source # | |
(Transcendental b, RationalConstant b) => C (T a b) Source # | |
(Field b, RationalConstant b) => C (T a b) Source # | |
(PseudoRing b, IntegerConstant b) => C (T a b) Source # | |
Additive b => C (T a b) Source # | |
fromSignal :: T out -> T inp out Source #
compileSignal :: T () out -> T out Source #
withArgs :: MakeArguments inp => (Arguments (T inp) inp -> T inp out) -> T inp out Source #
Using withArgs
you can simplify
let x = F.lift (arr fst) y = F.lift (arr (fst.snd)) z = F.lift (arr (snd.snd)) in F.compile (f x y z)
to
withArgs $ \(x,(y,z)) -> f x y z
class MakeArguments arg Source #
Instances
MakeArguments () Source # | |
MakeArguments a => MakeArguments (T a) Source # | |
MakeArguments (Parameter a) Source # | |
MakeArguments (T a) Source # | |
MakeArguments (Value a) Source # | |
MakeArguments (T a) Source # | |
MakeArguments (AnyArg a) Source # | |
MakeArguments (ParameterPacked a) Source # | |
Defined in Synthesizer.LLVM.Causal.Exponential2 makeArgs :: Functor f => f (ParameterPacked a) -> Arguments f (ParameterPacked a) Source # | |
(MakeArguments a, MakeArguments b) => MakeArguments (a, b) Source # | |
MakeArguments (Constant n a) Source # | |
MakeArguments (CascadeParameter n a) Source # | |
Defined in Synthesizer.LLVM.Filter.Allpass makeArgs :: Functor f => f (CascadeParameter n a) -> Arguments f (CascadeParameter n a) Source # | |
MakeArguments (ParameterValue n a) Source # | |
Defined in Synthesizer.LLVM.Filter.SecondOrderCascade makeArgs :: Functor f => f (ParameterValue n a) -> Arguments f (ParameterValue n a) Source # | |
(MakeArguments a, MakeArguments b, MakeArguments c) => MakeArguments (a, b, c) Source # | |
type family Arguments (f :: * -> *) arg Source #
Instances
You can use this to explicitly stop breaking of composed data types.
It might be more comfortable to do this using withGuidedArgs
.
Ground (f a) |
Instances
(Functor f, f ~ g) => MakeGroundArguments f (Ground g a) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional makeGroundArgs :: f (GroundArguments (Ground g a)) -> Ground g a Source # | |
type GroundArguments (Ground f a) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional |
withGroundArgs :: (MakeGroundArguments (T inp) args, GroundArguments args ~ inp) => (args -> T inp out) -> T inp out Source #
This is similar to withArgs
but it requires to specify the decomposition depth
using constructors in the arguments.
class Functor f => MakeGroundArguments f args Source #
Instances
Functor f => MakeGroundArguments f () Source # | |
Defined in Synthesizer.LLVM.Causal.Functional makeGroundArgs :: f (GroundArguments ()) -> () Source # | |
MakeGroundArguments f a => MakeGroundArguments f (T a) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional makeGroundArgs :: f (GroundArguments (T a)) -> T a Source # | |
(MakeGroundArguments f a, MakeGroundArguments f b) => MakeGroundArguments f (a, b) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional makeGroundArgs :: f (GroundArguments (a, b)) -> (a, b) Source # | |
(Functor f, f ~ g) => MakeGroundArguments f (Ground g a) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional makeGroundArgs :: f (GroundArguments (Ground g a)) -> Ground g a Source # | |
(MakeGroundArguments f a, MakeGroundArguments f b, MakeGroundArguments f c) => MakeGroundArguments f (a, b, c) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional makeGroundArgs :: f (GroundArguments (a, b, c)) -> (a, b, c) Source # |
type family GroundArguments args Source #
Instances
type GroundArguments () Source # | |
Defined in Synthesizer.LLVM.Causal.Functional type GroundArguments () = () | |
type GroundArguments (T a) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional | |
type GroundArguments (a, b) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional | |
type GroundArguments (Ground f a) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional | |
type GroundArguments (a, b, c) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional |
makeGroundArgs :: MakeGroundArguments f args => f (GroundArguments args) -> args Source #
Instances
MakeGuidedArguments (Atom a) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional makeGuidedArgs :: Functor f => Atom a -> f (PatternArguments (Atom a)) -> GuidedArguments f (Atom a) Source # | |
type GuidedArguments f (Atom a) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional | |
type PatternArguments (Atom a) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional |
withGuidedArgs :: (MakeGuidedArguments pat, PatternArguments pat ~ inp) => pat -> (GuidedArguments (T inp) pat -> T inp out) -> T inp out Source #
This is similar to withArgs
but it allows to specify the decomposition depth using a pattern.
class MakeGuidedArguments pat Source #
Instances
type family GuidedArguments (f :: * -> *) pat Source #
Instances
type GuidedArguments f () Source # | |
Defined in Synthesizer.LLVM.Causal.Functional type GuidedArguments f () = f () | |
type GuidedArguments f (T a) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional | |
type GuidedArguments f (Atom a) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional | |
type GuidedArguments f (a, b) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional | |
type GuidedArguments f (a, b, c) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional |
type family PatternArguments pat Source #
Instances
type PatternArguments () Source # | |
Defined in Synthesizer.LLVM.Causal.Functional type PatternArguments () = () | |
type PatternArguments (T a) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional | |
type PatternArguments (Atom a) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional | |
type PatternArguments (a, b) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional | |
type PatternArguments (a, b, c) Source # | |
Defined in Synthesizer.LLVM.Causal.Functional |
makeGuidedArgs :: (MakeGuidedArguments pat, Functor f) => pat -> f (PatternArguments pat) -> GuidedArguments f pat Source #
newtype PrepareArguments f merged separated Source #
PrepareArguments (f merged -> separated) |
withPreparedArgs :: PrepareArguments (T inp) inp a -> (a -> T inp out) -> T inp out Source #
Alternative to withGuidedArgs. This way of pattern construction is even Haskell 98.
withPreparedArgs2 :: PrepareArguments (T (inp0, inp1)) inp0 a -> PrepareArguments (T (inp0, inp1)) inp1 b -> (a -> b -> T (inp0, inp1) out) -> T (inp0, inp1) out Source #
atomArg :: PrepareArguments f a (f a) Source #
stereoArgs :: Functor f => PrepareArguments f a b -> PrepareArguments f (T a) (T b) Source #
pairArgs :: Functor f => PrepareArguments f a0 b0 -> PrepareArguments f a1 b1 -> PrepareArguments f (a0, a1) (b0, b1) Source #
tripleArgs :: Functor f => PrepareArguments f a0 b0 -> PrepareArguments f a1 b1 -> PrepareArguments f a2 b2 -> PrepareArguments f (a0, a1, a2) (b0, b1, b2) Source #