// run -gcflags=-G=3

// Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

func returnOption[T any](n int) Option[T] {
	if n == 1 {
		return Some[T]{}
	} else {
		return None{}
	}
}

type Option[T any] interface {
	sealedOption()
}

type Some[T any] struct {
	val T
}

func (s Some[T]) Value() T {
	return s.val
}

func (s Some[T]) sealedOption() {}

type None struct{}

func (s None) sealedOption() {}

func main() {
	s := returnOption[int](1)
	_ = s.(Some[int])

	s = returnOption[int](0)
	_ = s.(None)

	switch (any)(s).(type) {
	case Some[int]:
		panic("s is a Some[int]")
	case None:
		// ok
	default:
		panic("oops")
	}
}
