id:nobsunさんの簡単移調ツールを読んでみます (3)
昨日の続きです。簡単移調ツール - HaHaHa!(old) - haskellより引用。
37行目でreadで入力文字列をNote型に変換している仕組みは、以下の部分です。
53 instance Read Note where 54 readsPrec _ ('C':'#':rs) = [(C',rs)] 55 readsPrec _ ('C':rs) = [(C,rs)] 56 readsPrec _ ('D':rs) = [(D,rs)] 57 readsPrec _ ('E':'b':rs) = [(Eb,rs)] 58 readsPrec _ ('E':rs) = [(E,rs)] 59 readsPrec _ ('F':'#':rs) = [(F',rs)] 60 readsPrec _ ('F':rs) = [(F,rs)] 61 readsPrec _ ('G':'#':rs) = [(G',rs)] 62 readsPrec _ ('G':rs) = [(G,rs)] 63 readsPrec _ ('A':rs) = [(A,rs)] 64 readsPrec _ ('B':'b':rs) = [(Bb,rs)] 65 readsPrec _ ('B':rs) = [(B,rs)]
ここのパターンマッチで変換しています。仕様はここを参照かな? 難しそうなことが書いてあってあまり理解してません。
The Haskell 98 Report: Derived Instances