受this blog post和this code的啓發我以爲我會在Idris中使用它的接口(類型類)嘗試一些類別理論。Idris中的多參數子類
我定義Category
如下,工作正常:
interface Category (obj : Type) (hom : obj -> obj -> Type) where
id : {a : obj} -> hom a a
comp : {a, b, c : obj} -> hom b c -> hom a b -> hom a c
然後,在Verified
模塊的精神,我想我會定義一個類驗證:
interface Category obj hom =>
VerifiedCategory (obj : Type) (hom : obj -> obj -> Type) where
categoryAssociativity : {a, b, c, d : obj} ->
(f : hom c d) -> (g : hom b c) -> (h : hom a b) ->
(comp (comp f g) h = comp f (comp g h))
categoryLeftIdentity : {a, b : obj} -> (f : hom a b) -> (comp id f = f)
categoryRightIdentity : {a, b : obj} -> (f : hom a b) -> (comp f id = f)
不幸的是, Idris拒絕該代碼並顯示以下錯誤消息:
When checking type of constructor of CategoryTheory.VerifiedCategory:
Can't find implementation for Category obj hom
我做錯了什麼,或者我想用Idris做不到的多參數子類做些什麼?
所有這些代碼都在其自己的模塊中,名爲CategoryTheory
,沒有任何導入。
我正在使用Idris v0.12。
對不起,延遲迴復。謝謝,你的編輯對我有用。當指定'hom'作爲決定性參數時,我實際上可以放棄隱式參數的所有明確規定,並且它可以工作。 – Lemming