read someValue :: someDataType
或show someValue
,因为deriving (Show, Read)
必须写在data
声明中。除了错误之外,还有没有我们不希望我们的类型可序列化的情况?为什么要将Show与Read分开?除了错误之外,是否有只想显示某些数据而不想读取它的情况?如果没有,为什么不使用单个数据类型Serializable
?刚才,我正在使用Gloss库的Key数据类型,它派生了
Show
而不是Read
,这让我很困惑。这很遗憾,因为我想把控制的配置放在一个文件中,然后读取它,这样玩家就可以更改控制并拥有自己的配置。我不得不为Key、SpecialKey和MouseButton做包装器,这不是什么大问题,但是毫无意义。data Key' = Char' Char | SpecialKey' SpecialKey | MouseButton' MouseButton
deriving (Eq, Ord, Show, Read)
convertKey x = case x of
Char' c -> Char c
SpecialKey' sk -> SpecialKey sk
MouseButton' mb -> MouseButton mb