我们不能为每种类型都做read someValue :: someDataType
or ,因为必须写在声明中。除了错误之外,是否存在我们不希望我们的类型可序列化的情况?为什么 Show 与 Read 分开?有没有一种情况,除了错误,我们只想显示一些数据而不读取它?如果没有,为什么没有单一的数据类型?show someValue
deriving (Show, Read)
data
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