不明白这个集合类语法

Dud*_*udu 2 haskell

class Collection c where
  empty :: c key value
  singleton :: key -> value -> c key value
  insert
    :: Ord key
    => key -> value -> c key value -> c key value
  lookup :: Ord key => key -> c key value -> Maybe value
  delete :: Ord key => key -> c key value -> c key value
  keys :: c key value -> [key]
  values :: c key value -> [value]
  toList :: c key value -> [(key, value)]
  fromList :: Ord key => [(key,value)] -> c key value
Run Code Online (Sandbox Code Playgroud)

这与我读到的有关类型类的内容或我习惯的语法不同。我不明白c key value代表什么。另外,空应该是什么?它不像函数。感谢并感谢任何帮助,我是 Haskell 的新手,这让我感到困惑

Wil*_*sem 6

这里的类型参数c不会与“具体”类型统一,而是与仍然需要两个参数的类型构造函数统一。

一个简单的集合可以是:

data ListMap a b = ListMap [(a, b)]
Run Code Online (Sandbox Code Playgroud)

然后我们定义一个实例Collection

instance Collection ListMap where
    empty = ListMap []

    -- …
Run Code Online (Sandbox Code Playgroud)

事实上,empty这里有 as 类型c key value,so ListMap key value,那么它就是一个具体类型。

在这种情况下,类似的函数fromList :: Ord key => [(key,value)] -> c key value将导致fromList :: Ord key => [(key,value)] -> ListMap key value.