[英]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
。
您可以從key
和value
的使用方式推斷它們必須是類型(類似*
的事物)。 因此,根據c
的使用方式,您可以推斷它一定是某種* -> * -> *
:它應用於兩種類型以產生另一種類型。
使用KindSignatures
擴展,我們可以使這一點更加明確。 你可以寫
{-# LANGUAGE KindSignatures #-}
class Collection (c :: * -> * -> *) where
empty :: c key value
-- etc.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.