isobmff-0.13.0.0: src/Data/ByteString/IsoBaseFileFormat/Util/Versioned.hs
{-# LANGUAGE UndecidableInstances #-}
-- | A binary version 0/1 field with seperate content for each version.
module Data.ByteString.IsoBaseFileFormat.Util.Versioned
(Versioned(..))
where
import Data.ByteString.IsoBaseFileFormat.Box
import Data.ByteString.IsoBaseFileFormat.ReExports
-- TODO rewrite/cleanup the versioned mess
-- | Two alternative representations based on a /version/ index.
-- Use this for box content that can be either 32 or 64 bit.
data Versioned v0 v1 (version :: Nat) where
V0 :: IsBoxContent v0 => !v0 -> Versioned v0 v1 0
V1 :: IsBoxContent v1 => !v1 -> Versioned v0 v1 1
instance (version ~ 0,IsBoxContent v0,Default v0) => Default (Versioned v0 v1 (version :: Nat)) where
def = V0 def
instance IsBoxContent (Versioned v0 v1 version) where
boxSize (V0 c) = boxSize c
boxSize (V1 c) = boxSize c
boxBuilder (V0 c) = boxBuilder c
boxBuilder (V1 c) = boxBuilder c