我在Dafny中定义了一个多态二元关系类型(一个类):
class binRel<S,T>
实际声明是:
class binRel<S(!new,==),T(!new,==)>.
我想添加一个新的类型约束:类型S和T应该实现&#34; show&#34;操作(返回一个字符串)。
我阅读Dafny参考手册表明Dafny仅支持一些内置类型约束:==,显然是新的,并且没有办法要求类型支持,例如,某些特定的特征
也许我错了,比参考手册更新的更新提供了这样的功能。我好运吗?如果没有,是否可能有解决方法?
答案 0 :(得分:1)
正确,Dafny中只有少数内置类型约束。没有机制要求类型扩展特征。
我不知道Dafny的面向对象/命令式片段的好方法。在纯片段中,您可以使用第一类函数来解决这个问题。
datatype MyPair<A,B> = MakePair(a: A, b: B)
type Show<!A> = A -> string
function ShowMyPair<A,B>(sa: Show<A>, sb: Show<B>): Show<MyPair<A,B>>
{
(p: MyPair<A,B>) => "(" + sa(p.a) + "," + sb(p.b) + ")"
}