构建在FGL Data.Graph.Inductive.Graph中定义的UNode和LNode的问题

时间:2015-03-29 18:31:47

标签: haskell graph

我正在努力学习使用FGL。

我不明白为什么我不能使用UNodeLNodeLEdgeUEdge。这些类型似乎不为ghci所知,但是当我输入:t mkGraph时,它明确地使用它们。

λ: import Data.Graph.Inductive.Graph
λ: :t UNode

<interactive>:1:1: Not in scope: data constructor `UNode'
λ: :t LNode

<interactive>:1:1: Not in scope: data constructor `LNode'
λ: :t mkGraph
mkGraph :: Graph gr => [LNode a] -> [LEdge b] -> gr a b

我忘了做什么?

我正在尝试从Int创建UNode和LNode,但无法弄清楚如何去做。

1 个答案:

答案 0 :(得分:1)

UNodeLNode已经存在于类型级别,因此询问他们的类型有点奇怪。也许您想知道他们的那种,在这种情况下,您可以使用:k[ind]代替:t[ype]

Prelude Data.Graph.Inductive.Graph> :k UNode
UNode :: *
Prelude Data.Graph.Inductive.Graph> :k LNode
LNode :: * -> *

或许您想知道如何构建其中一个,在这种情况下,您可以使用:i[nfo]来了解更多信息:

Prelude Data.Graph.Inductive.Graph> :i UNode
type UNode = LNode ()   -- Defined in ‘Data.Graph.Inductive.Graph’
Prelude Data.Graph.Inductive.Graph> :i LNode
type LNode a = (Node, a)
    -- Defined in ‘Data.Graph.Inductive.Graph’
Prelude Data.Graph.Inductive.Graph> :i Node
type Node = Int     -- Defined in ‘Data.Graph.Inductive.Graph’
Prelude Data.Graph.Inductive.Graph> :i (,)
data (,) a b = (,) a b  -- Defined in ‘GHC.Tuple’
-- [editor's note: many instances snipped here]

现在我们终于知道如何建立一个UNode,如果有点苦心经营:

Prelude Data.Graph.Inductive.Graph> (32, ()) :: UNode
(32,())