{-# 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 basic voice types. Useful for vocal music but also for abstract -- voice leading etc. -- ------------------------------------------------------------------------------------- module Music.Parts.Voices ( ) 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 -- TODO newtype... -- Related to "bounded" and "sized" integers (i.e. Pitch.Equal) type SATB = Int type SSAATTBB = Int type SMezATBarB = Int -- 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 _ = "" --