| Safe Haskell | None |
|---|
Control.Etage.Delay
Description
This module defines a Neuron which delays received Impulses before sending them further. In this way network can have a simple
kind of memory (state) without a need of special Neurons. You grow it in Incubation by using something like:
nerveDelay <- (growNeuron :: NerveBoth (DelayNeuron IInteger)) (\o -> o { delay = 2 })
Sometimes the same effect can be achieved by using a Nerve as a queue and using fuseWith (or fuse) to synchronize (and thus
delay) Impulses. For example, the following two programs both output Fibonacci sequence:
incubate $ do
nerveDump <- (growNeuron :: NerveOnlyFor DumpNeuron) (\o -> o { showInsteadOfDump = True })
nerveDelay <- (growNeuron :: NerveBoth (DelayNeuron IInteger)) defaultOptions
nerveSum <- (growNeuron :: NerveBoth (FunctionNeuron IIntegerList IInteger)) (\o -> o { function = \t -> (: []) . IValue t . sum . list })
nerveFused <- [TranslatableFrom nerveDelay, TranslatableFrom nerveSum] `fuseWith` (listFuser :: ImpulseTime -> [IInteger] -> [IIntegerList])
nerveSum `attachTo` [TranslatableFor nerveDelay, TranslatableFor nerveDump]
nerveFused `attachTo` [TranslatableFor nerveSum]
liftIO $ do
t <- getCurrentImpulseTime
sendFromNeuron nerveSum $ IValue t 1
sendFromNeuron nerveDelay $ IValue t 0
incubate $ do
nerveDump <- (growNeuron :: NerveOnlyFor DumpNeuron) (\o -> o { showInsteadOfDump = True })
nerveSum <- (growNeuron :: NerveBoth (FunctionNeuron IIntegerList IInteger)) (\o -> o { function = \t -> (: []) . IValue t . sum . list })
liftIO $ do
t <- getCurrentImpulseTime
sendFromNeuron nerveSum $ IValue t 0
nerveSum' <- liftIO $ branchNerveFrom nerveSum
nerveFused <- [TranslatableFrom nerveSum, TranslatableFrom nerveSum'] `fuseWith` (listFuser :: ImpulseTime -> [IInteger] -> [IIntegerList])
nerveSum `attachTo` [TranslatableFor nerveDump]
nerveFused `attachTo` [TranslatableFor nerveSum]
liftIO $ do
t <- getCurrentImpulseTime
sendFromNeuron nerveSum $ IValue t 1
- data DelayNeuron i
- type DelayFromImpulse i = NeuronFromImpulse (DelayNeuron i)
- type DelayForImpulse i = NeuronForImpulse (DelayNeuron i)
- type DelayOptions i = NeuronOptions (DelayNeuron i)
Documentation
data DelayNeuron i Source
Instances
| Typeable1 DelayNeuron | |
| Eq (NeuronOptions (DelayNeuron i)) | |
| Data i => Data (NeuronOptions (DelayNeuron i)) | |
| Data i => Data (DelayNeuron i) | |
| Ord (NeuronOptions (DelayNeuron i)) | |
| Read (NeuronOptions (DelayNeuron i)) | |
| Show (NeuronOptions (DelayNeuron i)) | |
| Impulse i => Neuron (DelayNeuron i) | A |
type DelayFromImpulse i = NeuronFromImpulse (DelayNeuron i)Source
Impulses from DelayNeuron, of type i.
type DelayForImpulse i = NeuronForImpulse (DelayNeuron i)Source
Impulses for DelayNeuron, of type i.
type DelayOptions i = NeuronOptions (DelayNeuron i)Source
Options for DelayNeuron. This option is defined: