我正在定义一个 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
不是类的(可见)方法Read
”。