簡體   English   中英

Forall約束

[英]Forall constraints

如何編寫forall約束,例如對於某些類型的族FG

forall x y. G (F x y) ~ (x, y) 

是否可以使用Edward A. Kmett Constraints包? 如果是這樣,可以提供一個小例子嗎? 我認為我需要使用Forall

是的,這可以使用constraints 但要小心! 如果類型族是非平凡的,那么你所聲稱的平等不可能具有足夠的constraints一般性。 特別考慮當xy是卡住類型族時類型族是否成功減少

type family X where {}
type family Y where {}

另外,我看到你特定的期望約束沒有任何自由變量。 希望這只是一個例子; 像這樣的實際封閉約束不太可能有用。


Data.Constraint.Forall的基本類型族是Forall 使用ForallT可以更方便地處理這個特定的例子,但了解如何使用Forall是最重要的。

通常, Forall p表示forall x . px forall x . px 這聽起來不是很一般,但實際上,如果你逐步建立你的p 你追求

forall x y. G (F x y) ~ (x, y)

首先定義一個表達您尋求的關系的類。

class G (F x y) ~ (x, y) => C x y
instance G (F x y) ~ (x, y) => C x y

現在你可以一步一步地定義

class Forall (C x) => D x
instance Forall (C x) => D x

(你可以讀作D x = forall y . C xy

然后使用Forall D (即forall x . D x Forall D forall x . D x )來表達你的約束。 你需要使用inst來獲得Dict (D x)並再次獲得Dict (C xy)

暫無
暫無

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

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