module Temporal.Music.Notation (
-- * Introduction
-- | This library provides two kinds of musical structures. First is
-- general 'Score' representation. It tells how to combine musical
-- things together and how they can be transformed. Second is just
-- the oposite side of first one, it stands for
-- very basic musical structures like 'Pitch', 'Scale', 'Tone', 'Volume'.
--
-- So you can see huge gap inbetween the two. For example this
-- module doesn't exports any
-- specific datatype for notes. Though there are data types 'Note'
-- and 'Drum' defined in "Temporal.Music.Notation.Note" module
-- that can be seen as example of usage of basic data types.
-- It's up to you to fill in between.
-- But this gap is not just gap it's gap with bridges.
-- Pch\/Tone\/Vol Functors are those ropes that tie together those two
-- levels. To use all basic structures transformation in your specific
-- note-representation you only need to tell how they are wrapped, i.e.
-- provide instances of your note-representation for basic functors.
-- And then you can use the bridges.
--
-- For every XxxFunctor there is general instance for 'Score'.
--
-- For example
--
-- >instance PchFunctor a => PchFunctor (Score c a) where (...)
--
-- It implies that transformations like
-- 'quiet', 'step' or 'lower' can act on bunch of notes packed in
-- 'Score' if notes are inside 'PchFunctor'.
--
-- There are two preliminary steps for using this library
--
-- * find note representation that suits you
--
-- * if it contains basic musical structures, define corresponding
-- XxxFunctor instances
--
-- And then let it sound in 'Score'.
--
-- Examples can be found in package source folder.
module Temporal.Music.Notation.Volume,
module Temporal.Music.Notation.Pitch,
module Temporal.Music.Notation.Score,
module TypeLevel.NaturalNumber
)
where
import Temporal.Music.Notation.Volume
import Temporal.Music.Notation.Pitch
import Temporal.Music.Notation.Score
import TypeLevel.NaturalNumber