如何创建集群值?

时间:2014-08-22 11:04:40

标签: haskell graphviz

我尝试使用GraphViz package绘制嵌套群集的图表,但我无法理解如何使用NodeCluster类型的构造函数:

N a 
C c (NodeCluster c a)

我想到的图片是群集被排列在树中(代表嵌套)并由标签cl标记,但我不知道它是如何转化为上面的。

具体来说,我正在编写以下功能。这两条评论描述了我试图做的事情。

makeClusterParams :: (Show el) => (Node -> nl -> String) -> (Node -> nl -> (cl,Maybe cl)) -> Gr nl el -> GraphvizParams Node nl el cl nl
makeClusterParams f g graph = nonClusteredParams {
  clusterBy = cb,
  fmtNode = fn,
  fmtEdge = fe
  }
  where
    cb (xn,xl) = 
      case g xn xl of 
        (thisCluster, Just parentCluster) -> --put this node inside of thisCluster, and put thisCluster inside of parentCluster
        (thisCluster, Nothing) -> --put this node in the top-level cluster.
    fn (xn,xl) = [(Label . StrLabel. pack) (f xn xl)]
    fe (xm,xn,l) = [(Label . StrLabel. pack) (show l)]

1 个答案:

答案 0 :(得分:1)

此类型不代表树。相反,它似乎代表了从根到特定节点的路径。

您的方法似乎从根本上是错误的。如果g xn1 xl1返回(thisCluster, Just parentCluster1)g xn2 xl2返回(thisCluster, Just parentCluster2),该怎么办?您是否希望将thisCluster放入两个不同的父母中?