go - 在泛型 go 中模拟方法类型参数

标签 go generics functor

看完 Philip Wadler 关于轻量级围棋的演讲后,我对最新的 go generics draft 感到非常兴奋.但是现在有了一个可供我们使用的新泛型草案版本,似乎轻量级围棋中的一些东西不再可能。在这两个 talk ,以及 paper他引入了一个类似仿函数的接口(interface),称为 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)
}

关于go - 在泛型 go 中模拟方法类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62456946/

相关文章:

go - 不可能类型开关案例 : ErrorType (type reflect. 类型)不能有动态类型 *os.SyscallError(缺少对齐方法)

c# - 如何使用泛型比较 C# 中的 X 列表和 Y 列表?

java - 基于参数的通用转换

scala - 为什么 Scala 中没有 "Functor"特征?

Golang 使用 golang dep with dep

for-loop - for循环init语句中的变量声明

date - Golang time.Parse 定义新格式类型

java - 使用泛型编译失败?

Haskell为新数据类型创建map和foldr函数

haskell : Couldn't match expected type ‘a -> a’ with actual type ‘Failable (a -> a)’