// Copyright 2026 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.

// This file is used to generate an object file which
// serves as test file for gcimporter_test.go.
//
// Function bodies are never read, so panics are used
// for brevity. Struct contents are also never filled
// in.

package a

// monads
type Either[A, B any] struct {}

func (Either[A, B]) A() A { panic(42) }
func (Either[A, B]) B() B { panic(42) }

type Option[T any] struct {}

func (Option[T]) Get() T { panic(42) }
func (Option[T]) GetOrDefault[U any](u U) Either[T, U] { panic(42) }
func (Option[T]) MapIfPresent[U any](f func(T) U) Option[U] { panic(42) }

// pointer receiver
type Box[P any] struct {}

func (*Box[P]) Get() P { panic(42) }
func (*Box[P]) Set(p P) { panic(42) }

// streaming
type List[E any] []E
func (List[E]) Map[R any](f func(E) R) List[R] { panic(42) }
func (List[E]) FlatMap[R any](f func(E) List[R]) List[R] { panic(42) }
func (List[E1]) Zip[E2, R any](l List[E2], f func(E1, E2) R) List[R] { panic(42) }

type Pair[A, B any] struct {}
type BiList[A, B any] List[Pair[A, B]]

func (BiList[A, B]) Flip() BiList[B, A] { panic(42) }
func (BiList[A, B]) MapKeys[R any](f func(A) R) BiList[R, B] { panic(42) }
func (BiList[A, B]) MapValues[R any](f func(B) R) BiList[A, R] { panic(42) }
func (BiList[A, B]) FlatMapValues[R any](f func(B) List[R]) BiList[A, R] { panic(42) }
func (BiList[A, B]) MapEntries[K, V any](f func(Pair[A, B]) Pair[K, V]) BiList[K, V] { panic(42) }

type OrderedList[E comparable] []E
func (OrderedList[E]) Min() Option[E] { panic(42) }
func (OrderedList[E]) Max() Option[E] { panic(42) }
