mediabus-0.3.1.0: src/Data/MediaBus/Basics/SourceId.hs
-- | This module contains the 'SourceId' wrapper type, that indicate that
-- something is identifies a single source of media. This could be an RTP SSRC
-- or the IP/Port pair of a network source. The defining characteristic of a
-- 'SourceId' is that every thing that has a certain source id stems from **the
-- same media source**, e.g. the same microphone, audio file, synthesizer,...
module Data.MediaBus.Basics.SourceId
( SourceId(..)
, sourceIdValue
, type SrcId32
, type SrcId64
, HasSourceId(..)
, EachSourceId(..)
) where
import Control.DeepSeq
import Control.Lens
import Data.Default
import Data.Word
import GHC.Generics (Generic)
import Test.QuickCheck
-- | Things that can be uniquely identified by a looking at a (much simpler)
-- representation, the 'identity'.
newtype SourceId i = MkSourceId
{ _sourceIdValue :: i
} deriving (Eq, Arbitrary, Default, Ord, Generic)
-- | An 'Iso' for the value of a 'SourceId'
sourceIdValue :: Iso (SourceId a) (SourceId b) a b
sourceIdValue = iso _sourceIdValue MkSourceId
-- | A short alias for 'SourceId' with a 'Word32' value
type SrcId32 = SourceId Word32
-- | A short alias for 'SourceId' with a 'Word64' value
type SrcId64 = SourceId Word64
instance (NFData i) =>
NFData (SourceId i)
instance Show i =>
Show (SourceId i) where
showsPrec d (MkSourceId x) =
showParen (d > 10) $ showString "source-id: " . showsPrec 11 x
-- | Type class for a lens over the contained source id
class HasSourceId s t where
type SourceIdFrom s
type SourceIdTo t
-- | A lens for the 'SourceId'
sourceId :: Lens s t (SourceIdFrom s) (SourceIdTo t)
-- | Type class with a 'Traversal' for types that may or may not contain anctual
-- source id.
class EachSourceId s t where
type SourceIdsFrom s
type SourceIdsTo t
-- | A 'Traversal' for the 'SourceId'
eachSourceId :: Traversal s t (SourceIdsFrom s) (SourceIdsTo t)