我正在使用Haskell的FunctionalDependencies-Extension和MultiParamTypeClasses。我定義如下:帶有Haskell函數依賴關係的模糊變量
class Add a b c | a b -> c where
(~+) :: a -> b -> c
(~-) :: a -> b -> c
neg :: a -> a
zero :: a
工作正常(我與詮釋情況下試圖和Double具有能夠增加INT和雙打沒有明確轉換的終極目標)。
當我嘗試定義默認實現NEG或(〜 - ),像這樣:
class Add ...
...
neg n = zero ~- n
GHCI(7.0.4)告訴我下面的:
Ambiguous type variables `a0', `b0', `c0' in the constraint:
(Add a0 b0 c0) arising from a use of `zero'
Probable fix: add a type signature that fixes these type variable(s)
In the first argument of `(~-)', namely `zero'
In the expression: zero ~- n
In an equation for `neg': neg n = zero ~- n
Ambiguous type variable `a0' in the constraint:
(Add a0 a a) arising from a use of `~-'
Probable fix: add a type signature that fixes these type variable(s)
In the expression: zero ~- n
In an equation for `neg': neg n = zero ~- n
我覺得我做的瞭解這裏的問題。 GHC不知道哪個零使用,因爲它可以是任何零產生任何東西,然後反饋給我們只知道的~-
,它有一個a
它是正確的參數,併產生一個a
。
所以,我怎麼可以指定它應該從非常相同的實例零,即我怎麼能表達的東西,如:
neg n = (zero :: Add a b c) ~- n
我覺得a
,b
和c
這裏不的abc形成周圍的類,但任何ab和c,所以我怎麼能表達一個類型,它是對本地類型變量的引用?