toVivid :: Filter -> SDBody' '[] Signal -> SDBody' '[] Signal
toVivid f = case T.subForest f of
  [] -> nodeToVivid $ nodeContent $ T.rootLabel f
  ns -> sequentialCompose (nodeToVivid $ nodeContent $ T.rootLabel f) ns
 where
  sequentialCompose :: (SDBody' '[] Signal -> SDBody' '[] Signal) -> 
                       [Filter] -> 
                        SDBody' '[] Signal -> SDBody' '[] Signal
  sequentialCompose n ns = 
    (\bufs -> n $ (parallelCompose ns) bufs)
  parallelCompose :: [Filter] -> (SDBody' '[] Signal -> SDBody' '[] Signal)
  parallelCompose ns = 
    foldr (\thisNode composedNodes -> 
                (\bufs -> (composedNodes bufs) ~+ ((toVivid thisNode) bufs)))
          id ns
toVivid :: Filter -> SDBody' '[] Signal -> SDBody' '[] Signal
toVivid f = case T.subForest f of
  [] -> nodeToVivid $ nodeContent $ T.rootLabel f
  ns -> sequentialCompose (nodeToVivid $ nodeContent $ T.rootLabel f) ns
 where
  sequentialCompose :: (SDBody' '[] Signal -> SDBody' '[] Signal) -> 
                       [Filter] -> 
                        SDBody' '[] Signal -> SDBody' '[] Signal
  sequentialCompose n ns = 
    (\bufs -> n $ (parallelCompose ns) bufs)
  parallelCompose :: [Filter] -> (SDBody' '[] Signal -> SDBody' '[] Signal)
  parallelCompose ns = 
    foldr (\thisNode composedNodes -> 
                (\bufs -> (composedNodes bufs) ~+ ((toVivid thisNode) bufs)))
          id ns
toVivid f = case T.subForest f of
  [] -> nodeToVivid $ nodeContent $ T.rootLabel f
  ns -> sequentialCompose (nodeToVivid $ nodeContent $ T.rootLabel f) ns
 where
  sequentialCompose :: (SDBody' '[] Signal -> SDBody' '[] Signal) -> 
                       [Filter] -> 
                        SDBody' '[] Signal -> SDBody' '[] Signal
  sequentialCompose n ns = 
    (\bufs -> n $ (parallelCompose ns) bufs)
  parallelCompose :: [Filter] -> (SDBody' '[] Signal -> SDBody' '[] Signal)
  parallelCompose ns = 
    foldr (\thisNode composedNodes -> 
                (\bufs -> (composedNodes bufs) ~+ ((toVivid thisNode) bufs)))
          id ns