Name: graph
Owner: Elm Community
Description: Functional Graph Library in Elm.
Forked from: sgraf812/elm-graph
Created: 2016-06-08 01:11:42.0
Updated: 2018-04-30 17:02:19.0
Pushed: 2018-04-30 17:02:18.0
Homepage: http://package.elm-lang.org/packages/elm-community/graph/latest
Size: 119
Language: Elm
GitHub Committers
User | Most Recent Commit | # Commits |
---|
Other Committers
User | Most Recent Commit | # Commits |
---|
An neat graph library for Elm.
Got confused about what to wear when putting on shoes? This will help you out:
sUp : Graph String () -- node labels are strings, edge labels are empty
sUp =
t
nodes =
[ Node 0 "Socks"
, Node 1 "Undershirt"
, Node 2 "Pants"
, Node 3 "Shoes"
, Node 4 "Watch"
, Node 5 "Shirt"
, Node 6 "Belt"
, Node 7 "Tie"
, Node 8 "Jacket"
]
e from to =
Edge from to ()
edges =
[ e 0 3 -- socks before shoes
, e 1 2 -- undershorts before pants
, e 1 3 -- undershorts before shoes
, e 2 3 -- pants before shoes
, e 2 6 -- pants before belt
, e 5 6 -- shirt before belt
, e 5 7 -- shirt before tie
, e 6 8 -- belt before jacket
, e 7 8 -- tie before jacket
]
Graph.fromNodesAndEdges nodes edges
tToWearShoes: List String
tToWearShoes =
aph.guidedDfs
Graph.alongIncomingEdges -- which edges to follow
(Graph.onDiscovery (\ctx list -> -- append node labels on discovery
ctx.node.label :: list))
[3 {- "Shoes" NodeId -}] -- start with the node labelled "Shoes"
[] -- accumulate starting with the empty list
dressUp -- traverse our dressUp graph from above
|> Tuple.first -- ignores the untraversed rest of the graph
tToWearShoes == ["Pants", "Undershorts", "Socks", "Shoes"]
So better wear pants, undershorts, pants and socks with your shoes.
(In case you wonder: There is also a topologicalSort
function which can compute
valid linear orderings)
I was inspired by Martin Erwig's original idea realized in the functional graph library, but I also tried to keep it as simple as possible, bringing the neatness of Elm to graph libraries.