    module Haskore.Performance.Context
       (T,
        setPlayer, setDur, setTranspose, setDynamics,
        getPlayer, getDur, getTranspose, getDynamics,
        Pf.updatePlayer, Pf.updateDur, Pf.updateTranspose, Pf.updateDynamics,
        contextPlayer, contextDur, contextTranspose, contextDynamics, )
       where

    import qualified Haskore.Basic.Pitch    as Pitch
    -- import qualified Haskore.Music as Music
    import qualified Haskore.Performance as Pf
    import qualified Haskore.Performance.Player as Player
    import Haskore.Performance(Context(..))

    -- import qualified Numeric.NonNegative.Class as NonNeg

    {- If the Haskell compilers would support mutual depending modules
       the Context data type would be declared here instead of in Performance. -}

    type T time dyn note = Pf.Context time dyn note

    type SetContext time dyn note a = a -> T time dyn note -> T time dyn note

    setPlayer     :: SetContext time dyn note (Player.T time dyn note)
    setPlayer     = Pf.updatePlayer . const
    setDur        :: SetContext time dyn note time
    setDur        = Pf.updateDur . const
    setTranspose  :: SetContext time dyn note Pitch.Relative
    setTranspose  = Pf.updateTranspose . const
    setDynamics   :: SetContext time dyn note dyn
    setDynamics   = Pf.updateDynamics . const

    type GetContext time dyn note a = T time dyn note -> a

    getPlayer     :: GetContext time dyn note (Player.T time dyn note)
    getPlayer     = Pf.contextPlayer
    getDur        :: GetContext time dyn note time
    getDur        = Pf.contextDur
    getTranspose  :: GetContext time dyn note Pitch.Relative
    getTranspose  = Pf.contextTranspose
    getDynamics   :: GetContext time dyn note dyn
    getDynamics   = Pf.contextDynamics