在通用go中模拟方法类型参数
emulating method type parameters in generic go
看完 Philip Wadler 关于 featherweight go 的演讲后,我对最新的 go generics draft. But now with a version of the new generics draft available for us to play with it seems some of the things from featherweight go are no longer possible. In the both the talk, and the paper 感到非常兴奋,他介绍了一个名为 List
的仿函数接口。论文中的方法不太奏效。
type Any interface {}
type Function(type a Any, b Any) interface {
Apply(x a) b
}
type Functor interface {
Map(f Function) Functor
}
失败并出现错误:cannot use generic type Function(type a, b) without instantiation
如果您尝试向该方法添加类型参数,并使用普通函数,您将得到:methods cannot have type parameters
我想知道是否有人找到了使仿函数与草案的当前版本一起工作的方法。
你还没有把泛型进行到底;在您的示例代码中,Functor
将 Function
视为非通用代码。正确的代码(编译,see here)应该是:
type Function(type a Any, b Any) interface {
Apply(x a) b
}
type Functor(type a Any, b Any) interface {
Map(f Function(a,b)) Functor(a,b)
}
看完 Philip Wadler 关于 featherweight go 的演讲后,我对最新的 go generics draft. But now with a version of the new generics draft available for us to play with it seems some of the things from featherweight go are no longer possible. In the both the talk, and the paper 感到非常兴奋,他介绍了一个名为 List
的仿函数接口。论文中的方法不太奏效。
type Any interface {}
type Function(type a Any, b Any) interface {
Apply(x a) b
}
type Functor interface {
Map(f Function) Functor
}
失败并出现错误:cannot use generic type Function(type a, b) without instantiation
如果您尝试向该方法添加类型参数,并使用普通函数,您将得到:methods cannot have type parameters
我想知道是否有人找到了使仿函数与草案的当前版本一起工作的方法。
你还没有把泛型进行到底;在您的示例代码中,Functor
将 Function
视为非通用代码。正确的代码(编译,see here)应该是:
type Function(type a Any, b Any) interface {
Apply(x a) b
}
type Functor(type a Any, b Any) interface {
Map(f Function(a,b)) Functor(a,b)
}