【发布时间】:2016-07-24 13:03:30
【问题描述】:
受this blog post 和this code 的启发,我想我会在 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。
【问题讨论】:
标签: idris