[Haskell-cafe] What do _you_ want to see in FGL?
Henning Thielemann
schlepptop at henning-thielemann.de
Mon May 10 09:10:05 EDT 2010
Ivan Lazar Miljenovic schrieb:
> Pros for allowing you to use a custom node type:
> * Matches your data better
> * No need for extra lookup maps when converting your data to FGL form
>
> Cons:
> * Makes type-sigs uglier/more verbose
Unlabelled graphs with custom node type would have only one type
parameter. :-)
> * Restricts the ability to optimise
That's my question. As far as I know the set of node identifiers in a
graph is not contiguous, thus you cannot use Arrays but you must use
IntMap or so.
> Using Int gives us a fixed-size data type with known good comparison
> performance and with a range that should suit most purposes.
Replacing IntMap by Map is not much slower, is it?
> As an alternative, see how I have Graphalyze create an FGL graph from
> [n] and [(n,n,e)]:
> http://hackage.haskell.org/packages/archive/Graphalyze/0.9.0.0/doc/html/Data-Graph-Analysis.html#v%3AimportData
>
> We're also considering using MPTCs or ATs to let you place restrictions
> on the label types (when defining a new graph instance). However,
> before you again state how you don't want labels, consider this:
>
> * It's easier to make a labelled graph act as an unlabelled one than the
> other way around.
Sure, it's the same argument that in MatLab everything is a
complex-valued matrix. They even represent Bool by a 1x1 complex-valued
matrix. Possible, but clean? From today's viewpoint separation of
labelled and unlabelled graphs is additional work, but I'm afraid there
will arise problems with this design. Unfortunately, I can't tell them
today.
> The current "type Node = Int" alias is only there to provide a unique
> index type for referencing nodes; the actual Ints don't really represent
> the nodes IMHO, the labels do (in conjunction with the index for
> colouring, etc.). In your example case of using PkgName (I assume you
> mean PackageName or PackageIdentifier?), can you guarantee that each
> PkgName value is unique before you go blindly using it (what about
> having the same library installed in both the global and user
> database?)?
Of course you must choose data as key, that is actually a key. But this
is not the problem of FGL. And with Node = Int, I also have to choose a
key for my dictionary (Map Something Node).
In my case I consider packages that are to be installed, so no
distinction between globally and locally installed packages. I want
really the package name as key.
More information about the Haskell-Cafe
mailing list