簡體   English   中英

不明白這個集合 class 語法

[英]Don't understand this collection class syntax

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

這與我讀過的有關類型類的內容或我習慣的語法不同。 我不明白c key value代表什么。 另外,空應該是什么? 它不像 function。感謝並感謝任何幫助,我是 haskell 的新手,這讓我感到困惑

類型參數c在這里不會與“具體”類型統一,而是與仍然需要兩個參數的類型構造函數統一。

一個簡單的集合可以是:

data ListMap   = ListMap [(a, b)]

然后我們定義一個Collection的實例:

instance Collection ListMap where
    empty = ListMap []

    -- …

實際上,這里的empty類型為c key value ,因此 ListMap key ListMap key value是一個具體類型。

在這種情況下,像fromList:: Ord key => [(key,value)] -> c key value這樣的 function 將導致fromList:: Ord key => [(key,value)] -> ListMap key value

您可以從keyvalue的使用方式推斷它們必須是類型(類似*的事物)。 因此,根據c的使用方式,您可以推斷它一定是某種* -> * -> * :它應用於兩種類型以產生另一種類型。

使用KindSignatures擴展,我們可以使這一點更加明確。 你可以寫

{-# LANGUAGE KindSignatures #-}

class Collection (c :: * -> * -> *) where
    empty :: c key value
    -- etc.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM