我正在努力学习使用FGL。
我不明白为什么我不能使用UNode
,LNode
,LEdge
和UEdge
。这些类型似乎不为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,但无法弄清楚如何去做。
答案 0 :(得分:1)
UNode
和LNode
已经存在于类型级别,因此询问他们的类型有点奇怪。也许您想知道他们的那种,在这种情况下,您可以使用: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,())