我使用GHC.TypeLits
模塊中的Nat
類型,它承認程序員接口應該在單獨的庫中定義。在任何情況下,GHC.TypeLits
具有類KnownNat
與類功能natVal
其中編譯時Nat
轉換成運行時Integer
。還有它增加了編譯時間Nat
個類型功能(+)
。避免類型級別上的類別限制
的問題是,鑑於(KnownNat n1, KnownNat n2)
,GHC不能推導出KnownNat (n1 + n2)
。
這導致在任何需要的時候我添加型水平土黃要添加的約束的爆炸。
一種替代方法是定義自然數自己就像這樣:
data Nat = Zero | Succ Nat
也許使用圖書館像type-natural。但似乎傻不使用其內置到GHC的納茨,這也可以讓您很好的類型(即0
,1
)使用文字數字,而不必定義:
N0 = Zero
N1 = Succ N0
etc...
反正是有解決這個與GHC KnownNat
約束是否需要在所有地方?或者我應該忽略GHC.TypeLits
模塊來解決我的問題?
您可能對[此問題]感興趣(https://stackoverflow.com/questions/41492754/could-not-deduce-knownnat-in-two-existentials-with-respect-to-the-singletons-lib/41496362)和相應的答案。 – gallais