This module defines a Neuron
which delays received Impulse
s before sending them further. In this way network can have a simple
kind of memory (state) without a need of special Neuron
s. 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) Impulse
s. 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
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
Impulse
s from DelayNeuron
, of type i
.
type DelayForImpulse i = NeuronForImpulse (DelayNeuron i)Source
Impulse
s for DelayNeuron
, of type i
.
type DelayOptions i = NeuronOptions (DelayNeuron i)Source
Options for DelayNeuron
. This option is defined: