我很难弄清楚如何编写这段代码。
例如,我有一个签名,A
一个函子作为参数,为了能够使用,我定义了一个模块实现签名C
a: A
C
B
A
Require Import String.
Module Type A.
Parameter toto : string -> nat.
End A.
Module C (Import a : A).
...
End C.
Module B <: A.
Definition toto (s: string) := foo s.
End B. (* COQ error *)
并支持我有类型foo: string -> string list-> nat.
然后在End B.
,我有一个错误Coq
说:signature components for label toto do not match: types differ.
或者另一种方式:
Module B.
Definition too (s : string) := foo s.
End B.
Module Export D := C B.
我会在D
我理解这个问题,因为我没有string list
在 的定义中提供论据toto
。
string list
所以我的问题是我不知道在这种情况下如何提供论点。
在我的真实代码中,我使用Section
并Record
键入而不是Module
.
Record A : Type := mkA { too : string -> nat}.
然后我打开一个Section
Section B.
Variable l: string list.
Definition too (s: string) := foo s l.
Definition A := mkA too.
End B.
您能否帮助我编写或理解如何B
正确编写模块中的函子?有没有办法可以string list
在模块中定义/声明变量?同样在定义之后,Coq
我会将其提取到OCaml
.