我试图创建一个可以转换为字符串的数据类型(用于用户输入)。我想要一个函数,它可以是dataToText :: Colour -> String
,也可以是textToData :: String -> Colour
的反函数。我编写了下面的代码来实现这个功能:
data Colour = Red | Blue | Green deriving (Eq, Read)
instance Show Colour where
show Red = "R"
show Blue = "B"
show Green = "G"
当我在GHCi中运行这个命令时,show Red
返回"R"
,这正是我希望'dataToText'工作的方式。
我想,但我可能错了,通过派生Read类,read将通过反转我的show函数来工作。将我的代码加载到GHCi中不会给予错误,所以我猜必须创建一些read函数。我在网上看了很多关于read的信息,但是我不知道如何实现这个基本的读取功能,经常提到readPrec
和readsPrec
,但是我无法使用这些来创建一个成功的实现。有人能解释一下我上面的例子应该如何实现吗?我觉得我只是缺少了一个(但基本的)一块拼图,以了解阅读是如何工作的。
1条答案
按热度按时间plicqrtu1#
在派生示例时使用
-ddump-derive
然后您可以轻松地替换字符串