这是一个简单的问题,但我找不到使用PSQ library的方法。
下面的代码很乱,但似乎找到PSQ
和fromList
,但找不到Binding
(错误:Not in scope: data constructor 'Data.PSQueue.Binding'
)。 LearnYouAHaskell没有介绍如何使用非标准库,我找不到任何只显示PSQ正在实现的简单示例。
import qualified Data.PSQueue (Binding, PSQ, fromList)
{-
data Binding k p
k :-> p binds the key k with the priority p.
Constructors
k :-> p
data PSQ k p
A mapping from keys k to priorites p.
-}
type VertHeap = Data.PSQueue.PSQ Int Int
main = do
--fromList :: (Ord k, Ord p) => [Binding k p] -> PSQ k p
return $ Data.PSQueue.fromList $ map (\k -> Data.PSQueue.Binding k 1000000) [2..10]
答案 0 :(得分:3)
可能很容易遗漏,但Binding类型的数据构造函数为:->
。
所以这个导入应该有效:
import qualified Data.PSQueue (PSQ,Binding(..),fromList)
以后:
return $ Data.PSQueue.fromList $ map (\k -> k Data.PSQueue.:-> 1000000) [2..10]
使用Binding(..)
将导入Binding
数据类型的所有数据构造函数。
编辑::->
只是由Data.PSQueue
定义的中缀运算符。 Data.PSQueue.:->
是其完全限定名称。
答案 1 :(得分:0)
一旦我理解了如何引用Binding,我就可以使用更熟悉的模式
import qualified Data.PSQueue as PSQ
type VertHeap = PSQ.PSQ Int Int
main = do
return $ PSQ.fromList $ map (\k -> k PSQ.:-> 1000000) [2..10]