Haskell:从用户添加的库导入(中缀)数据构造函数

时间:2014-11-09 15:18:08

标签: haskell

这是一个简单的问题,但我找不到使用PSQ library的方法。

下面的代码很乱,但似乎找到PSQfromList,但找不到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]

2 个答案:

答案 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]