я определяю тип Octave:Как написать заказное шоу функции в Haskell
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». Я знаю, что мы можем настроить наше шоу поведение, как это:
instance Show Blabla where
show (Blabla ints chars list num) =
"integers = " ++ show ints ++ "\n"
Но проблема в том, что я использую тип перечисления, который означает, что он не имеет значения, кроме его имени идентификатора «О1». Как я могу получить доступ к этому в Haskell?
Другой вопрос: как я могу его прочитать?
read "O1" :: Octave
работает, но я хочу read "1" :: Octave
instance Read Octave where
read "1" = O1
read "2" = O2
read "3" = O3
Это не работает: "read
не (видимый) метод класса Read
".
Любые лучшие способы? – yehe
Лучше, чем «функции отлично, тривиально легко писать»? – amalloy
Что делать, если Octave имеет 8 значений? – yehe