[Haskell-cafe] FGL problem: cannot acces data constructor NodeMap

Ivan Lazar Miljenovic ivan.miljenovic at gmail.com
Sat Jul 24 08:28:45 EDT 2010

Immanuel Normann <immanuel.normann at googlemail.com> writes:

> Hi,
> I have a problem with the data constructor NodeMap
> Data.Graph.Inductive.NodeMap
> of the graph library fgl- (also fgl-
> I cannot access the data constructor NodeMap, as the ghci session shows:
> Prelude> :m Data.Graph.Inductive.NodeMap
> Prelude Data.Graph.Inductive.NodeMap> :t NodeMap
> <interactive>:1:0: Not in scope: data constructor `NodeMap'

Well, yes, because you're not meant to.

> However, when I load the source directly it works:
> Prelude> :l Data/Graph/Inductive/NodeMap.hs
> [1 of 3] Compiling Data.Graph.Inductive.Graph (
> Data/Graph/Inductive/Graph.hs, interpreted )
> [2 of 3] Compiling Data.Graph.Inductive.Internal.FiniteMap (
> Data/Graph/Inductive/Internal/FiniteMap.hs, interpreted )
> [3 of 3] Compiling Data.Graph.Inductive.NodeMap (
> Data/Graph/Inductive/NodeMap.hs, interpreted )
> Ok, modules loaded: Data.Graph.Inductive.Internal.FiniteMap,
> Data.Graph.Inductive.Graph, Data.Graph.Inductive.NodeMap.
> *Data.Graph.Inductive.NodeMap> :t NodeMap
> NodeMap :: (Ord a) => FiniteMap a Node -> Int -> NodeMap a
> Why is that so?

This works because you're using ghci from within the module, whereas
when you import it you're using only its exposed API.

> Afterall, my purpose is to get access to the map in a NodeMap and finally to
> apply lookup to it. But I don't know how to access the map from a NodeMap
> (the map selector isn't accessible either).

You're not meant to; the point of NodeMap is to serve as a wrapper
around the normal graph types, not for you to use directly (exactly the
same as why the constructor for Map isn't exported).

May I ask, however, why you want to use Data.Graph.Inductive.NodeMap?

Ivan Lazar Miljenovic
Ivan.Miljenovic at gmail.com

More information about the Haskell-Cafe mailing list