为了更多地了解Go、泛型和函数式编程,我实现了一个List类型(摘自list.go):
package funcprog
type Function[T any] func(T) T
type List[T any] []T
func (l List[T]) Map(f Function[T]) List[T] {
var ys List[T]
for _, x := range l {
y := f(x)
ys = append(ys, y)
}
return ys
}
效果很好(main.go):
package main
import (
"fmt"
"funcprog"
)
func main() {
numbers := funcprog.List[int]{0, 1, 2, 3}
twice := func(x int) int { return x * 2 }
fmt.Println(numbers.Map(twice))
}
$ go run main.go
[0 2 4 6]
我List的其实是一个Functor,所以我写了这个接口(functor.go):
package funcprog
type Functor[T any] interface {
Map(Function[T]) Functor[T]
}
但是,如果我想将我List的用作Functor( main.go,已修改):
import (
"fmt"
"funcprog"
)
func demo[T int](f funcprog.Functor[T]) {
fmt.Println(f.Map(func(x T) T { return x * 2 }))
}
func main() {
numbers := funcprog.List[int]{0, 1, 2, 3}
demo[int](numbers)
}
我收到此错误:
funcprog.List[int] does not implement funcprog.Functor[int] (wrong type for Map method)
have Map(f funcprog.Function[int]) funcprog.List[int]
want Map(funcprog.Function[int]) funcprog.Functor[int]
我的不List[int]也是一个Functor[int],因为List[T]满足Functor[T]吗?
UYOU
慕丝7291255
相关分类