To hoist this comment a bit higher: https://news.ycombinator.com/item?id=29583557 and this one which as the "a hah" moment for me: https://news.ycombinator.com/item?id=29583866
While you can't do this:
type Option[T any] struct{}
func (o Option[T]) Map[U any](f func(a T) U) Option[U] { ... }
You can do this: type Option[T,U any] struct{}
func (o Option[T,U]) Map(f func(a T) U) Option[U] { ... }
So this is not quite as restricting as it seems. Though it is still likely to be annoying. Runnable example: https://gotipplay.golang.org/p/2w2y1KEjXVE