{-# LANGUAGE TypeFamilies #-}
module Language.KansasLava.Dynamic where
import Language.KansasLava.Rep
import Language.KansasLava.Signal
import Language.KansasLava.Types
import Data.Dynamic
addDynamic :: (sig ~ Signal i, Rep a) => Dynamic -> sig a -> sig a
addDynamic dyn = idS (BlackBox (Box dyn))
getDynamics :: (sig ~ Signal i, Rep a) => sig a -> [Dynamic]
getDynamics sig = find (unD $ deepS sig)
where
find :: Driver E -> [Dynamic]
find (Port _ (E (Entity (BlackBox (Box bb)) _ ins))) =
bb : case ins of
[(_,_,i)] -> find i
_ -> error "getDynamics: no inputs"
find _ = []