module Music.Parts.Instrument.Strings (
        StringInstrument,
        stringInstrument,
        
        StringTuning,
        standardTuning,
        allowedTunings,
        
        isAllowedTuning,
        isStandardTuning,
        isNonStandardTuning,
        
        HarmonicPosition,
        
        naturalHarmonicPositions,        
  ) where

import Control.Lens
import Music.Parts.Instrument
import Data.Set (Set)
import Music.Pitch.Common (Pitch, Interval)
import Music.Pitch (Ambitus, Clef)

newtype StringInstrument = StringInstrument Instrument

stringInstrument :: Prism' Instrument StringInstrument
stringInstrument = undefined
-- TODO

type StringTuning = [Pitch]

standardTuning :: StringInstrument -> StringTuning
standardTuning = error "No standardTuning"

-- TODO various tunings
allowedTunings :: StringInstrument -> Set StringTuning
allowedTunings = error "No allowedTunings"


isAllowedTuning :: StringInstrument -> StringTuning -> Bool
isAllowedTuning = error "No isAllowedTuning"

isStandardTuning :: StringInstrument -> StringTuning -> Bool
isStandardTuning = error "No isStandardTuning"

isNonStandardTuning :: StringInstrument -> StringTuning -> Bool
isNonStandardTuning = error "No isNonStandardTuning"


type HarmonicPosition = Integer

naturalHarmonicPositions :: StringInstrument -> Set HarmonicPosition
naturalHarmonicPositions = error "No naturalHarmonicPositions"