私は Octave タイプを定義しています:
data Octave = 1 | 2 | 3
deriving (Show, Read, Ord, Enum)
'1' はデータ コンストラクター識別子には有効ではないため、次のようにする必要があります。
data Octave = O1 | O2 | O3
deriving (Show, Eq, Read, Ord, Enum)
ここで、show Octave O1
「O1」が表示されますが、これはまさに私が望んでいるものではありません。結果を「1」にしたい。Show の動作を次のようにカスタマイズできることはわかっています。
instance Show Blabla where
show (Blabla ints chars list num) =
"integers = " ++ show ints ++ "\n"
しかし、問題は、列挙型を使用していることです。つまり、識別子名「O1」以外の値がないことを意味します。Haskell でどのようにアクセスできますか?
別の質問: どうすれば読み返すことができますか?
read "O1" :: Octave
動作しますが、欲しいですread "1" :: Octave
instance Read Octave where
read "1" = O1
read "2" = O2
read "3" = O3
これは機能しません: " read
is not a (visible) method of class Read
".