module Data.MediaBus.BlankMedia ( CanGenerateBlankMedia(..) , CanBeBlank(..) ) where import Data.MediaBus.Ticks import Data.MediaBus.Segment import Data.Time.Clock import GHC.TypeLits import Control.Lens import Data.Proxy class CanGenerateBlankMedia a where blankFor :: NominalDiffTime -> a blankFor dt = blankForTicks (nominalDiffTime # dt :: Ticks 1000000000000 Integer) blankForTicks :: (Integral i, KnownNat r) => Ticks r i -> a blankForTicks ticks = blankFor (from nominalDiffTime # ticks) class CanBeBlank a where blank :: a instance (HasStaticDuration d, CanGenerateBlankMedia a) => CanBeBlank (Segment d a) where blank = MkSegment (blankFor (getStaticDuration (Proxy :: Proxy d)))