5
對不起,這個簡單的問題打擾你。我正試圖瞭解類型族擴展如何工作。當我愚弄它時,我遇到了一個錯誤,我無法弄清楚爲什麼。Haskell類型家庭錯誤
class Foo a b c where
data T a b c :: *
f :: a -> T a b c
g :: T a b c -> b
h :: c -> a -> b
h c a = g $ f a
錯誤消息:
Could not deduce (Foo a b c0) arising from a use of ‘g’
from the context (Foo a b c)
bound by the class declaration for ‘Foo’
at DB/Internal/Typecast.hs:(17,1)-(25,19)
The type variable ‘c0’ is ambiguous
Relevant bindings include
a :: a (bound at DB/Internal/Typecast.hs:25:9)
h :: c -> a -> b (bound at DB/Internal/Typecast.hs:25:5)
In the expression: g
In the expression: g $ f a
In an equation for ‘h’: h c a = g $ f a
我不知道如何爲c在T a b c
曖昧g
。編譯器能否從T a b c
的f
獲得c
的類型?
我只是想g . f
請修正代碼示例中的縮進 - 即發佈實際代碼。發佈代碼而不是實際使用的代碼只是混淆了實際問題。 – Cubic
「編譯器不能從'f'的'T a b c'中得到'c'的類型嗎?」是的,但是'f'從哪裏得到它的'T a b c'? –
@DanielWagner對不起,我不認爲我明白類型家庭是如何工作的。在使用數據關鍵字的實例聲明中聲明的f和g都不是T a b c嗎? – Larry