module Data.MediaBus.Media.Media
( IsMedia()
, MediaDescription(..)
, HasMedia(..)
, type HasMedia'
, media'
, type HasMediaL
, type HasMediaL'
, EachMedia(..)
, type EachMedia'
, eachMedia'
, type EachMediaL
, type EachMediaL'
) where
import Control.DeepSeq
import Control.Lens
class ( NFData i
, Show (MediaDescription i)
) =>
IsMedia i
data MediaDescription i where
MkShowMedia :: (Show (MediaDescription i)) => MediaDescription i
class (IsMedia (MediaFrom s), IsMedia (MediaTo t)) =>
HasMedia s t where
type MediaFrom s
type MediaTo t
media :: Lens s t (MediaFrom s) (MediaTo t)
type HasMedia' s = (IsMedia (MediaFrom s), HasMedia s s, MediaFrom s ~ MediaTo s)
media'
:: HasMedia' s
=> Lens' s (MediaFrom s)
media' = media
type HasMediaL s t a b = (IsMedia a, HasMedia s t, MediaFrom s ~ a, MediaTo t ~ b)
type HasMediaL' s a = (IsMedia a, HasMedia s s, MediaFrom s ~ a, MediaTo s ~ a, MediaFrom s ~ MediaTo s)
class (IsMedia (MediaFromE s), IsMedia (MediaToE t)) =>
EachMedia s t where
type MediaFromE s
type MediaToE t
eachMedia :: Traversal s t (MediaFromE s) (MediaToE t)
default eachMedia :: HasMediaL s t (MediaFromE s) (MediaToE t) =>
Traversal s t (MediaFromE s) (MediaToE t)
eachMedia = media
type EachMedia' s = (IsMedia (MediaFromE s), EachMedia s s, MediaFromE s ~ MediaToE s)
eachMedia'
:: EachMedia' s
=> Traversal' s (MediaFromE s)
eachMedia' = eachMedia
type EachMediaL s t a b = (IsMedia a, EachMedia s t, MediaFromE s ~ a, MediaToE t ~ b)
type EachMediaL' s a = (IsMedia a, EachMedia s s, MediaFromE s ~ a, MediaToE s ~ a, MediaFromE s ~ MediaToE s)