pIntervalName :: CharParser () Interval
pIntervalName =  "interval name" <??> choiceInterval
    [(In.perf1, ["P1", "perf1", "dim2"])
    ,(In.min2, ["m2", "min2", "A1", "aug1"])
    ,(In.maj2, ["M2", "maj2", "d3", "dim3"])
    ,(In.min3, ["m3", "min3", "A2", "aug2"])
    ,(In.maj3, ["M3", "maj3", "d4", "dim4"])
    ,(In.perf4, ["P4", "perf4", "A3", "aug3"])
    ,(In.dim5, ["d5", "dim5", "A4", "aug4", "tritone"])
    ,(In.perf5, ["P5", "perf5", "d6", "dim6"])
    ,(In.min6, ["m6", "min6", "A5", "aug5"])
    ,(In.maj6, ["M6", "maj6", "d7", "dim7"])
    ,(In.min7, ["m7", "min7", "A6", "aug6"])
    ,(In.maj7, ["M7", "maj7", "d8", "dim8"])
    ,(In.perf8, ["P8", "perf8", "A7", "aug7"])
    ,(In.Interval 13, ["m9", "min9"]) -- p8 + min2
    ,(In.Interval 14, ["M9", "maj9"]) -- p8 + maj2
    ,(In.Interval 15, ["m10", "min10"]) -- p8 + min3
    ,(In.Interval 16, ["M10", "maj10"]) -- p8 + maj3
    ]
    where
        p_oneName (interval, names) = try $ interval <$ oneOfStr names
        choiceInterval is = choice (map p_oneName is)
pIntervalName :: CharParser () Interval
pIntervalName =  "interval name" <??> choiceInterval
    [(In.perf1, ["P1", "perf1", "dim2"])
    ,(In.min2, ["m2", "min2", "A1", "aug1"])
    ,(In.maj2, ["M2", "maj2", "d3", "dim3"])
    ,(In.min3, ["m3", "min3", "A2", "aug2"])
    ,(In.maj3, ["M3", "maj3", "d4", "dim4"])
    ,(In.perf4, ["P4", "perf4", "A3", "aug3"])
    ,(In.dim5, ["d5", "dim5", "A4", "aug4", "tritone"])
    ,(In.perf5, ["P5", "perf5", "d6", "dim6"])
    ,(In.min6, ["m6", "min6", "A5", "aug5"])
    ,(In.maj6, ["M6", "maj6", "d7", "dim7"])
    ,(In.min7, ["m7", "min7", "A6", "aug6"])
    ,(In.maj7, ["M7", "maj7", "d8", "dim8"])
    ,(In.perf8, ["P8", "perf8", "A7", "aug7"])
    ,(In.Interval 13, ["m9", "min9"]) -- p8 + min2
    ,(In.Interval 14, ["M9", "maj9"]) -- p8 + maj2
    ,(In.Interval 15, ["m10", "min10"]) -- p8 + min3
    ,(In.Interval 16, ["M10", "maj10"]) -- p8 + maj3
    ]
    where
        p_oneName (interval, names) = try $ interval <$ oneOfStr names
        choiceInterval is = choice (map p_oneName is)
pIntervalName =  "interval name" <??> choiceInterval
    [(In.perf1, ["P1", "perf1", "dim2"])
    ,(In.min2, ["m2", "min2", "A1", "aug1"])
    ,(In.maj2, ["M2", "maj2", "d3", "dim3"])
    ,(In.min3, ["m3", "min3", "A2", "aug2"])
    ,(In.maj3, ["M3", "maj3", "d4", "dim4"])
    ,(In.perf4, ["P4", "perf4", "A3", "aug3"])
    ,(In.dim5, ["d5", "dim5", "A4", "aug4", "tritone"])
    ,(In.perf5, ["P5", "perf5", "d6", "dim6"])
    ,(In.min6, ["m6", "min6", "A5", "aug5"])
    ,(In.maj6, ["M6", "maj6", "d7", "dim7"])
    ,(In.min7, ["m7", "min7", "A6", "aug6"])
    ,(In.maj7, ["M7", "maj7", "d8", "dim8"])
    ,(In.perf8, ["P8", "perf8", "A7", "aug7"])
    ,(In.Interval 13, ["m9", "min9"]) -- p8 + min2
    ,(In.Interval 14, ["M9", "maj9"]) -- p8 + maj2
    ,(In.Interval 15, ["m10", "min10"]) -- p8 + min3
    ,(In.Interval 16, ["M10", "maj10"]) -- p8 + maj3
    ]
    where
        p_oneName (interval, names) = try $ interval <$ oneOfStr names
        choiceInterval is = choice (map p_oneName is)