{-# LANGUAGE DeriveDataTypeable         #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE TypeFamilies               #-}

------------------------------------------------------------------------------------
-- |
-- Copyright   : (c) Hans Hoglund 2012-2015
--
-- License     : BSD-style
--
-- Maintainer  : hans@hanshoglund.se
-- Stability   : experimental
-- Portability : non-portable (TF,GNTD)
--
-- Provides various representaitons of musical instruments, subdivisions and parts.
--
-------------------------------------------------------------------------------------

module Music.Parts.Basic (
        BasicPart
  ) where

import           Control.Applicative
import           Control.Lens            (toListOf)
import           Data.Default
import           Data.Functor.Adjunction (unzipR)
import qualified Data.List
import           Data.Maybe
import           Data.Semigroup
import           Data.Traversable        (traverse)
import           Data.Typeable
import           Text.Numeral.Roman      (toRoman)
import           Data.Semigroup.Option.Instances

newtype BasicPart = BasicPart { getBasicPart :: Option (First Integer) }
    deriving (Eq, Ord, Num, Integral, Real, Enum, Typeable, Semigroup, Monoid)

instance Default BasicPart where
  def = mempty

instance Show BasicPart where
    show _ = ""