【问题标题】:Generating diagram of Haskell data structuresHaskell数据结构的生成图
【发布时间】:2015-08-12 12:05:52
【问题描述】:

我正在寻找一种工具,给定一个在 Haskell 中具有多个数据结构的文件,它能够生成包含数据结构之间关系的图表。

我目前有一个带有解析树(+- 600 行)的文件,我希望更直观地查看解析树。我有哪些选择?

提前致谢。

【问题讨论】:

  • 我对 Haskell 专用工具一无所知。你可能最终会使用由 GraphVis 提供支持的东西。
  • 所以你说你只关心data 类型声明,而不关心实际代码?
  • @Bergi,确实,我只想看数据声明。

标签: haskell graph


【解决方案1】:

一种选择是使用diagrams 库,它有多种后端。 diagrams-contrib 包包括rendering trees 的辅助功能。因此,也许您可​​以将解析树从 Data.Tree 转换为 rose tree 并以这种方式呈现。

以下示例使用 SVG 后端:

module Treeish where

-- This example requires the containers, 
-- diagrams-core, diagrams-lib, diagrams-contrib and diagrams-svg packages
import Data.Tree
import Diagrams.Prelude 
import Diagrams.TwoD.Layout.Tree (renderTree,symmLayout',_slHSep,_slVSep)
import Diagrams.Backend.SVG (SVG)
import Diagrams.Backend.SVG.CmdLine (defaultMain)

exampleTree :: Tree String
exampleTree = Node "A" [Node "B" [], Node "C" []]

renderNodeTree :: Tree String -> QDiagram SVG V2 Double Any
renderNodeTree nodeTree = renderTree 
    (\a -> letter a `atop` square 1.03 # fc white) 
    (~~) 
    (symmLayout' (with{ _slHSep = 3,  _slVSep = 2}) nodeTree)
  where
     letter a = text a # font "monospace" # fontSize (local 0.47) 

main :: IO ()
main = defaultMain (renderNodeTree exampleTree)

renderTree 是一个函数,给定一个为树节点创建图表的函数,以及一个在两个给定点之间创建一条线的函数,返回一个从已注释的树中创建图表的函数带有节点位置。

使用symmLayout' 函数添加位置注释。

with 只是来自Data.Defaultdefault 的同义词。

(~~) 在两点之间创建一条线。

当程序从命令行运行时(使用runhaskell Treeish -o foo.svg -w 300之类的东西),它会生成一个可以在浏览器中查看的 SVG 文件:

Hereherediagrams 近期教程的两个部分。

【讨论】:

    【解决方案2】:

    如果我对您的理解正确,您希望获取一些 Haskell 代码的 AST 并将其可视化。如何首先使用https://hackage.haskell.org/package/haskell-src 解析它,然后使用https://hackage.haskell.org/package/graphviz 生成输出。

    如果您想要可视化的不是 AST,只需将您的数据结构映射到 GraphViz 输出并忽略 Parser.Haskell 部分。

    无论如何,我认为滚动您自己的可视化代码将是最灵活的方式,并且考虑到 Haskell 的表现力,可能不会太费力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多