Haskell数据结构图的生成

Haskell数据结构图的生成,haskell,graph,Haskell,Graph,我正在寻找一种工具,在Haskell中给定一个包含多个数据结构的文件,该工具能够生成包含数据结构之间关系的图表 我目前有一个带有解析树(+-600行)的文件,我希望更直观地看到解析树。我有什么选择 提前感谢。如果我理解正确,您希望使用一些Haskell代码的AST并将其可视化。首先使用解析它,然后使用生成输出,怎么样 如果它不是您想要可视化的AST,只需将您的数据结构映射到GraphViz输出,并忽略Parser.Haskell部分 无论如何,我认为滚动您自己的可视化代码将是最灵活的方式,并且考

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

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


提前感谢。

如果我理解正确,您希望使用一些Haskell代码的AST并将其可视化。首先使用解析它,然后使用生成输出,怎么样

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

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

一个选项是使用具有各种后端的库。
diagrams contrib
软件包包括的辅助功能。因此,也许您可以将解析树转换为from
Data.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)
是一个函数,给定一个为树节点创建图表的函数,以及一个在两个给定点之间创建直线的函数,该函数返回一个从已用节点位置注释的树中创建图表的函数

使用函数添加位置注释

只是
Data.default
中的
default
的同义词

在两点之间创建一条线

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


这是最近关于
图表的教程的两部分

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