packages feed

variable-media-field-0.1.0.0: src/Media/VF.hs

{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE StandaloneDeriving #-}

-- | --   Module    : Media.VF
--   License   : MIT
--   Stability : experimental
--
-- Simple Variable Media Type
module Media.VF
  ( VF (..),
    VFC (..),
  )
where

import Data.Text
import GHC.Generics

-- | Variable Media Field, specify `u` to
-- determine where media will be sourced.
--
-- @since 0.1.0.0
data VF u where
  Blank :: VF u
  RawText :: Text -> VF u
  Image :: u -> VF u
  Audio :: u -> VF u
  Video :: u -> VF u

deriving stock instance Eq u => Eq (VF u)

deriving stock instance Functor VF

deriving stock instance Generic (VF u)

deriving stock instance Show u => Show (VF u)

-- | Variable Media Field Collection
--
-- @since 0.1.0.0
newtype VFC u = VFC {unVFC :: [VF u]}
  deriving stock (Eq, Show, Generic, Functor)