Посмотрев доклад Филипа Вадлера о полулегком весе go, я был очень взволнован новейшим go драфтом дженериков . Но теперь, когда мы можем поиграть с версией нового проекта дженериков, кажется, что некоторые вещи из полулегкого go больше невозможны. И в talk , и в 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
Интересно, нашел ли кто-нибудь способ заставить функторы работать с текущей версией черновика.