This module contains a Classification type you can use for making custom views of chord symbols.
In my implementation of the ChordType.toString function, I've done my best to cover what I consider the usual cases, using chord symbols that are likely to be recognized by a majority of musicians. If ChordType.toString works for your purposes, then you don't need this module.
But chord symbols vary greatly with musical style, educational background, and personal preference. The choices I've made may not appeal to you!
Maybe, for example, you want to use modern jazz symbols like "∆7(+11)" and "7(+9-13)". Or maybe you want to write them out in plain English like "dominant seventh (sharp nine, flat thirteen)". You may even want to convert to a more complex view than a String can express, like SVG or elm-ui.
If any of these is the case, you can use the Classification type to write your own custom chord symbol function:
ChordType to return an instance of Classification.case statement and handle each branch to create your custom view.A good place to start would be to take a look at the source for ChordType.toString to see how I did it.
Get an instance of this type by using
ChordType.classify:This
Classificationtype is my best attempt to codify the chord type taxonomy, as I understand it, into a type you can destructure for your own purposes (i.e. custom views of chord symbols).Be aware that there are a lot of edge cases in the area of chord classification, and this type can represent some combinations that are unusual, and even impractical, but not clearly invalid.
For instance, I have never seen a "m6(♯11)" chord, but I have also never seen a rule that explains why such a chord cannot be made.
Use your judgment as to which of these cases you want to handle, and which you want to ignore. Take a look at the source for
ChordType.toStringto see how I approached this question.