Haskell Queue作为Show的一个实例

时间:2013-12-08 14:58:12

标签: haskell

我在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]) 

2 个答案:

答案 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,如果要创建它的实例。否则会抛出编译错误。