2016-08-08 11 views
-2

Я хочу получить доступ к узлам, ребрам и свойствам «xDotGraph» (G.DotGraph) и установить их снова. Вот Haskell код, который печатает точечный формат граф с помощью Graphviz:Как получить доступ к краям узлов графа точечного формата (обобщенно) в haskell

$ cat example.dot 
digraph { 
    a [type1="", type2=""]; 
    b [type1="", type2=""]; 
    a -> b [label=""]; 
} 

import Data.GraphViz 
import Data.Text.IO as T 
import qualified Data.Text.Lazy as B 
import qualified Data.Text.Lazy.IO as L 
import qualified Data.GraphViz.Types.Generalised as G 
import Data.GraphViz.Printing 

xDotText <- L.readFile "example.xdot" 
let xDotGraph = parseDotGraph xDotText :: G.DotGraph String 
T.putStrLn $ renderDot $ toDot xDotGraph 
+0

Пожалуйста, опишите, что вы уже пробовали пока что и что не сработало для вас. Поскольку он сидит сейчас, ваш вопрос больше напоминает «Я не хочу делать какую-либо работу, сделайте это для меня». вид вопросов. – jkeuhlen

+0

@jkeuhlen, я ищу функцию, которая принимает этот тип графика и возвращает узлы и ребра. let ab = graphNodes xDotGraph let ab1 = graphEdges xDotGraph – David

+0

Имеет ли [__graphNodes__] (https://hackage.haskell.org/package/graphviz-2999.18.1.2/docs/Data-GraphViz-Types.html#v:graphNodes) Работа? – ErikR

ответ

1

Это работает для меня (в основном идентично коду, но есть несколько изменений):

#!/usr/bin/env stack 
{- stack runghc --resolver lts-6.0 --package graphviz 
-} 
import Data.GraphViz 
import Data.Text.IO as T 
import qualified Data.Text.Lazy as B 
import qualified Data.Text.Lazy.IO as L 
import qualified Data.GraphViz.Types.Generalised as G 
import Data.GraphViz.Printing 
import Data.GraphViz.Types 

main = do 
    xDotText <- L.readFile "example.dot" 
    let xDotGraph = parseDotGraph xDotText :: G.DotGraph String 
    L.putStrLn $ renderDot $ toDot xDotGraph 
    print $ graphNodes xDotGraph 
    print $ graphEdges xDotGraph 
+0

высоко оценил Эрик, работает .. :) – David

+0

как насчет принятия ответа? – ErikR