id:nobsunさんの簡単移調ツールを読んでみます (4)

この間の続き… 何ですが、2006-08-09id:nobsunさんのところが更新されてました。そちらのソースで。
簡単移調ツール - HaHaHa!(old) - haskellより引用。
とりあえず関数mappingsと関数showmappingを読む前に、どのようなどのような値が返っているか確認してみます。
関数mainのところを一時的に書き換えて返ってきている値を表示してみます。
まずは関数mappingの場合です。移調前のキー(Note型)と移調後のキー(Note型)を受けて、[(移調前のNote型, 移調後のNote型)]を返しています。こんな感じで関数mainを変更して実行してみます。

main = print $ mappings (read "C") (read "G")

出力は以下のようになります。

[(C ,G ),(C#,G#),(D ,A ),(Eb,Bb),(E ,B ),(F ,C ),(F#,C#),(G ,D ),(G#,Eb),(A ,E )
,(Bb,F ),(B ,F#)]

次はshowmapping関数の場合です。(移調前のNote型, 移調後のNote型)を受けて、[出力文字列(1行)]を返しています。ここでもmain関数を以下のように書き換えて実行してみます。

main = print $ map showmapping $ mappings (read "C") (read "G")

出力はこんな感じになります。

["C  => G ","C# => G#","D  => A ","Eb => Bb","E  => B ","F  => C ","F# => C#","G
  => D ","G# => Eb","A  => E ","Bb => F ","B  => F#"]

CとC#の桁をそろえるために、Note型には以下の定義がされています。

    34	instance Show Note where
    35	  show C  = "C "
    36	  show C' = "C#"
    37	  show D  = "D "
    38	  show Eb = "Eb"
    39	  show E  = "E "
    40	  show F  = "F "
    41	  show F' = "F#"
    42	  show G  = "G "
    43	  show G' = "G#"
    44	  show A  = "A "
    45	  show Bb = "Bb"
    46	  show B  = "B "