Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell队列作为Show的实例_Haskell - Fatal编程技术网

Haskell队列作为Show的实例

Haskell队列作为Show的实例,haskell,Haskell,我已经在Haskell数据队列= 现在我们被要求定义一个函数showQueue作为一个助手函数,将我的数据队列声明为Show的一个实例(序言) 真的不知道该怎么做 有人能帮我吗 期待中的感谢 PS:如果需要,我可以发布我的数据队列代码 这是我的密码: data Queue a = Q [a] deriving Show isEmpty :: Queue a -> Bool isEmpty (Q [])

我已经在Haskell数据队列=

现在我们被要求定义一个函数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]) 

这可能是解决此问题的方法之一:

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

如果要创建派生的实例,也不要使用派生。否则它将抛出编译错误。

假设您需要编写自己的
Show
实例,而不是使用
派生
。您可能需要显示队列中的每个元素。在这种情况下,元素类型
a
需要是
Show
的一个实例,然后您可以通过某种方式将显示的值组合在一起,例如

instance Show a => Show (Queue a) where
    show (Q l) = "Queue " ++ show l

数据队列的Post代码。是否要以特定方式格式化输出?您的
队列
类型已经在派生
Show
,因此您打算删除该类型并创建显式实例吗?您好,没有,我被要求添加一个额外的函数作为辅助函数,以使队列成为Show中的一个实例。衍生节目不能被删除。非常感谢!但是concat$intersperse在这个上下文中意味着什么呢?
intersperse
将在列表和
concat
之间放置“,”将它们连接到一个
字符串