[英]Haskell class definition question about restrictions
class IndexSelect k (m :: k -> (* -> *) -> *) | m -> k where
type Restriction m (p :: k) :: Constraint
indexSelect :: Restriction m p => Sing (p :: k) -> Proxy m -> LocalDb f -> f (TableEntity (m p))
我是Haskell語言的新手。 我在我剛剛開始的公司的代碼庫中的某些代碼中解密類定義時遇到了麻煩。 這是做什么的?
這里有很多事情要做。 我將首先向您介紹第7.6節類和實例聲明 , 7.7類型系列 ,以及7.8.4 GHC語言擴展文檔的明確資格 。 (我絕不是任何一個問題的專家,並點擊你的問題,希望有人提供進一步的啟示。)
我們正在定義一個名為IndexSelect
的多參數類型類,其參數為k
和m
。 (多參數類型7.6.1.1)
類m
的第二個參數給出了一個明確的類型限定: k -> (* -> *) -> *
in English m
必須是一個函數,它接受一個k
和一個函數並返回一個值。 (7.8.4顯性定量)
這個類有一個函數依賴| m -> k
| m -> k
。 m
的選擇必須唯一地確定k
給定該函數的名稱,這意味着集合m
必須只有一種合理的密鑰k
。 (7.6.2功能依賴)
該類形成索引類型族type Restriction m (p :: k) :: Constraint
。 它出現在類定義中,因此它是關聯類型的同義詞。 (7.7.2.1.1相關類型的家庭聲明)。 它需要一些m
和一個p
,它必須是k
型並導致約束。
該類有一個列出的方法indexSelect
,可能猜測該方法可以從集合中提取信息。 不知道Sing
, LocalDb
和TableEntity
什么,我不能多說。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.