>From reading your message, it seems you want a graph library of sorts.
I've used FGL extensively and found it to be very nice.  It even
provides both a purely functional interface as well as an
imperative-esque interface.  It also comes with a bunch of standard
algorithms built in, though I don't know enough about circuitry stuff to
know whether those would be useful or not.

If FGL seems like overkill to you, I have my own little mini graph
library which basically looks like:

  - An ADT, Node:  newtype Node = Node Int deriving ...
  - The 'Graph n e' data structure, containing:
      - a FiniteMap from n -> Node
      - an (growable?) array of type IOArray (Node,Node) e

the array represents the edges in the top half (i do some index fiddling
to get this efficient) and the finitemap represents the node labellings.
It's a pretty stupid interface and works a lot better when the graphs
are fixed size (that way you don't need to grow the array).  But it
works.

--
 Hal Daume III                                   | [EMAIL PROTECTED]
 "Arrest this man, he talks in maths."           | www.isi.edu/~hdaume


> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of Sarah Thompson
> Sent: Monday, July 07, 2003 8:04 AM
> To: [EMAIL PROTECTED]
> Subject: Representing cyclic data structures efficiently in Haskell
> 
> 
> What is the best way to represent cyclic data structures in Haskell?
> 
> Lists are trivial. Trees are trivial. But what if the thing you're 
> trying to represent is shaped like an electronic circuit, with a 
> (possibly large) number of nodes connected by multiple arrows 
> to other 
> nodes? In an imperative language like C++, I'd probably just 
> model the 
> circuit directly, with objects representing nodes and pointers 
> representing links between nodes. A good way to model this in 
> Haskell is 
> less obvious, however.
> 
> A simplistic approach would be to represent such a structure 
> as a list 
> of nodes, where each node contained a list of other connected nodes. 
> Containing the actual nodes within the sub-lists probably 
> isn't feasible 
> -- some kind of reference would be necessary in order to get around 
> chicken-and-egg problems with instantiating the data 
> structure. But, in 
> this case, it's not so easy to see how one could 'walk' the structure 
> efficiently, because moving from node to node would involve quite 
> horrible (possibly slow) lookups. In C++, I'd simply follow a 
> pointer, 
> which would be an extremely fast operation.
> 
> I would also need to implement efficient indexes into the 
> data structure 
> -- flat searching will be too slow for non-trivial amounts of 
> data. In 
> C++, I'd implement one or more external (probably STL-based) indexes 
> that point into the main data structure.
> 
> How do people typically solve this problem at the moment? I 
> know a few 
> people out there have written hardware compilers in Haskell 
> and similar 
> languages, so there should be some experience of this in the 
> community. 
> I can probably work something out soon enough, but 
> reinventing the wheel 
> is never a great idea.
> 
> Thank you in advance,
> 
> -- 
>       ----------------------------------------------
>      / __            + / Sarah Thompson      **** /
>     / (_  _  _ _ |_   /                        * /
>    /  __)(_|| (_|| ) / [EMAIL PROTECTED]      * /
>   / +               / http://findatlantis.com/ /
>  ----------------------------------------------
> 
> 
> _______________________________________________
> Haskell-Cafe mailing list
> [EMAIL PROTECTED]
> http://www.haskell.org/mailman/listinfo/haskell-cafe
> 
_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to