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

Problems building UNode and LNode defined in FGL Data.Graph.Inductive.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,但不知道该怎么做。

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,())