我在Haskell数据队列中写了一个队列数据类型Queue = .....
现在我们被要求将一个函数showQueue定义为一个帮助函数来将我的数据队列声明为一个来自Show(前奏)的实例
真的不知道该怎么做。
有人可以帮助我吗?
感谢您的期待!
PS:如果有必要,我可以发布我的数据队列代码。
这是我的代码:
data Queue a = Q [a]
deriving Show
isEmpty :: Queue a -> Bool
isEmpty (Q []) = True
isEmpty (Q _) = False
enqueue :: (Ord a) => a -> Queue a -> Queue a
enqueue x (Q xs) = Q (xs++[x])
答案 0 :(得分:3)
假设您需要编写自己的Show
实例,而不是使用deriving
。您可能需要显示队列中的每个元素。在这种情况下,元素类型a
必须是Show
的实例,然后您可以以某种方式将显示的值组合在一起,例如。
instance Show a => Show (Queue a) where
show (Q l) = "Queue " ++ show l
答案 1 :(得分:1)
这可能是解决此问题的方法之一:
data Queue a = Q [a]
instance Show a => Show (Queue a) where
show = showQueue
showQueue :: Show a => Queue a -> String
showQueue (Q xs) = concat $ intersperse "," $ map show xs
showQueue是一个演示样本输出的函数。您可以通过更改该函数的定义以任何方式显示自定义输出。
或者这会容易得多:
showQueue :: Show a => Queue a -> String
showQueue (Q xs) = show xs
也不要使用deriving
,如果要创建它的实例。否则会抛出编译错误。