【发布时间】:2011-10-21 14:57:20
【问题描述】:
所以我有一个数据类型
data SomeType a =
Type a |
Mix (SomeType a) (SomeType a)
这是我的 SomeType 展示实例
instance (Show a) => Show (SomeType a) where
show (Type a) = show a
show (Mix a b) = "(" ++ show a ++ " " ++ show b ++ ")"
所以
Mix (Type 5) (Type 4)
会给我
(5 4)
现在我想拥有
read "(3 4)" :: SomeType Int
生产
(3 4)
或
read "(a b)" :: SomeType Char
生产
(a b)
我不知道如何使用 Read 类。
【问题讨论】:
-
顺便说一句,
SomeType Char的示例不是show (Mix (Type 'a') (Type 'b'))会生成的。 -
您可以在类型声明后使用
deriving (Show, Read)派生 - Show 和 Read 实例。虽然它们不会产生您的输出和输入,但它们是显示(有时是读取)值的标准方式,这就是为什么您应该使用它们而不是您自己的实例的原因。如果您想以不同的方式显示它们,请使用单独的函数并将其命名为render左右。