Haskell数据结构图的生成
我正在寻找一种工具,在Haskell中给定一个包含多个数据结构的文件,该工具能够生成包含数据结构之间关系的图表 我目前有一个带有解析树(+-600行)的文件,我希望更直观地看到解析树。我有什么选择Haskell数据结构图的生成,haskell,graph,Haskell,Graph,我正在寻找一种工具,在Haskell中给定一个包含多个数据结构的文件,该工具能够生成包含数据结构之间关系的图表 我目前有一个带有解析树(+-600行)的文件,我希望更直观地看到解析树。我有什么选择 提前感谢。如果我理解正确,您希望使用一些Haskell代码的AST并将其可视化。首先使用解析它,然后使用生成输出,怎么样 如果它不是您想要可视化的AST,只需将您的数据结构映射到GraphViz输出,并忽略Parser.Haskell部分 无论如何,我认为滚动您自己的可视化代码将是最灵活的方式,并且考
提前感谢。如果我理解正确,您希望使用一些Haskell代码的AST并将其可视化。首先使用解析它,然后使用生成输出,怎么样 如果它不是您想要可视化的AST,只需将您的数据结构映射到GraphViz输出,并忽略Parser.Haskell部分 无论如何,我认为滚动您自己的可视化代码将是最灵活的方式,并且考虑到Haskell的表达能力,可能不会太费力 一个选项是使用具有各种后端的库。
diagrams contrib
软件包包括的辅助功能。因此,也许您可以将解析树转换为fromData.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,事实上,我只想看看数据声明。