Skip to main content

types

import "github.com/go-softwarelab/common/pkg/types"

Package types defines a set of useful constraints to be used with type parameters.

Package types provides a collection of useful generic types and constraints for Go applications, enhancing type safety and enabling more expressive generic programming.

This package includes generic constraint types that define sets of types usable with type parameters, such as numeric types, ordered types, or comparable types.

It also includes utility types and structs like tuples or pairs, which simplify working with grouped data.

The `types` package is designed to complement Go's type parameter features, making it easier to write reusable and type-safe code.

type Comparable​

Comparable is an interface that is implemented by all comparable types (booleans, numbers, strings, pointers, channels, arrays of comparable types, structs whose fields are all comparable types). The comparable interface may only be used as a type parameter constraint, not as the type of a variable.

type Comparable = comparable

type Complex​

Complex is a constraint that permits any complex numeric type. If future releases of Go add new predeclared complex numeric types, this constraint will be modified to include them.

type Complex interface {
// contains filtered or unexported methods
}

type Float​

Float is a constraint that permits any floating-point type. If future releases of Go add new predeclared floating-point types, this constraint will be modified to include them.

type Float interface {
// contains filtered or unexported methods
}

type Integer​

Integer is a constraint that permits any integer type. If future releases of Go add new predeclared integer types, this constraint will be modified to include them.

type Integer interface {
// contains filtered or unexported methods
}

type Number​

Number is a constraint that permits any numeric type. If future releases of Go add new predeclared numeric types, this constraint will be modified to include them.

type Number interface {
// contains filtered or unexported methods
}

type Ordered​

Ordered is a constraint that permits any ordered type: any type that supports the operators < <= >= >. If future releases of Go add new ordered types, this constraint will be modified to include them.

Note that floating-point types may contain NaN ("not-a-number") values. An operator such as == or < will always report false when comparing a NaN value with any other value, NaN or not. See the [Compare] function for a consistent way to compare NaN values.

type Ordered = cmp.Ordered

type Pair​

Pair is a generic type that represents a pair of values.

type Pair[L, R any] struct {
Left L
Right R
}

NewPair​

func NewPair[L, R any](left L, right R) *Pair[L, R]

NewPair creates a new Pair with the given left and right values.

*Pair[L, R].GetLeft​

func (p *Pair[L, R]) GetLeft() L

GetLeft returns the left value of the pair.

*Pair[L, R].GetRight​

func (p *Pair[L, R]) GetRight() R

GetRight returns the right value of the pair.

*Pair[L, R].Seq​

func (p *Pair[L, R]) Seq() iter.Seq[Pair[L, R]]

Seq returns an iter.Seq with this Pair.

This is useful for reusing functions provided by package seq.

*Pair[L, R].Seq2​

func (p *Pair[L, R]) Seq2() iter.Seq2[L, R]

Seq2 returns an iter.Seq2 with left and right value.

This is useful for reusing functions provided by package seq2.

*Pair[L, R].ToTuple​

func (p *Pair[L, R]) ToTuple() Tuple2[L, R]

ToTuple converts the Pair to a Tuple.

*Pair[L, R].Unpack​

func (p *Pair[L, R]) Unpack() (L, R)

Unpack returns the left and right values of the pair.

type PairLike​

PairLike represents any type that is pair-like, it is used for creating a Result instance.

type PairLike[L, R any] interface {
GetLeft() L
GetRight() R
}

type Result​

Result is a type representing a result that could be either a value or an error.

type Result[V any] struct {
// contains filtered or unexported fields
}

FailureResult​

func FailureResult[V any](err error) *Result[V]

FailureResult creates a new Result instance with the provided error.

ResultFrom​

func ResultFrom[V any](provider func() (V, error)) *Result[V]

ResultFrom creates a Result instance from a function that returns a value and an error.

ResultFromPair​

func ResultFromPair[V any](pair PairLike[V, error]) *Result[V]

ResultFromPair creates a Result instance from a PairLike argument.

ResultOf​

func ResultOf[V any](value V, err error) *Result[V]

ResultOf creates a new Result instance with the provided value and error.

SuccessResult​

func SuccessResult[V any](value V) *Result[V]

SuccessResult creates a new Result instance with the provided value.

*Result[V].Get​

func (m *Result[V]) Get() (V, error)

Get returns the value and error from the Result instance.

*Result[V].GetError​

func (m *Result[V]) GetError() error

GetError returns the error from the Result instance. If there is no error, it returns nil.

*Result[V].IsError​

func (m *Result[V]) IsError() bool

IsError checks if the Result instance contains an error.

*Result[V].IsNotError​

func (m *Result[V]) IsNotError() bool

IsNotError checks if the Result instance does not contain an error.

*Result[V].MustGetError​

func (m *Result[V]) MustGetError() error

MustGetError returns the error from the Result instance, panicking if there is no error.

*Result[V].MustGetValue​

func (m *Result[V]) MustGetValue() V

MustGetValue returns the value from the Result instance, panicking if there is an error.

*Result[V].Or​

func (m *Result[V]) Or(alternative *Result[V]) *Result[V]

Or returns this Result if there is no error, otherwise it returns the provided alternative Result instance.

*Result[V].OrElse​

func (m *Result[V]) OrElse(defaultValue V) V

OrElse returns the value if there is no error, otherwise it returns the provided default value.

*Result[V].OrElseGet​

func (m *Result[V]) OrElseGet(defaultValue func() V) V

OrElseGet returns the value if there is no error, otherwise it returns the result of the provided function.

*Result[V].Seq​

func (m *Result[V]) Seq() iter.Seq[Result[V]]

Seq returns an iter.Seq with this Result.

This is useful for reusing functions provided by package seq.

*Result[V].Seq2​

func (m *Result[V]) Seq2() iter.Seq2[V, error]

Seq2 returns an iter.Seq2 with value and error.

This is useful for reusing functions provided by package seq2 or seqerr.

type Signed​

Signed is a constraint that permits any signed integer type. If future releases of Go add new predeclared signed integer types, this constraint will be modified to include them.

type Signed interface {
// contains filtered or unexported methods
}

type SignedNumber​

SignedNumber is a constraint that permits any signed numeric type. If future releases of Go add new predeclared signed numeric types, this constraint will be modified to include them.

type SignedNumber interface {
// contains filtered or unexported methods
}

type Tuple​

Tuple is a group of 2 elements

type Tuple[A, B any] = Tuple2[A, B]

NewTuple​

func NewTuple[A, B any](a A, b B) Tuple[A, B]

NewTuple creates a Tuple from given values.

type Tuple2​

Tuple2 is a group of 2 elements.

type Tuple2[A, B any] struct {
A A
B B
}

NewTuple2​

func NewTuple2[A, B any](a A, b B) Tuple2[A, B]

NewTuple2 creates a Tuple2 from given values.

Tuple2[A, B].GetLeft​

func (t Tuple2[A, B]) GetLeft() A

GetLeft returns the left value of the tuple.

Tuple2[A, B].GetRight​

func (t Tuple2[A, B]) GetRight() B

GetRight returns the right value of the tuple.

type Tuple3​

Tuple3 is a group of 3 elements.

type Tuple3[A, B, C any] struct {
A A
B B
C C
}

NewTuple3​

func NewTuple3[A, B, C any](a A, b B, c C) Tuple3[A, B, C]

NewTuple3 creates a Tuple3 from given values.

type Tuple4​

Tuple4 is a group of 4 elements.

type Tuple4[A, B, C, D any] struct {
A A
B B
C C
D D
}

NewTuple4​

func NewTuple4[A, B, C, D any](a A, b B, c C, d D) Tuple4[A, B, C, D]

NewTuple4 creates a Tuple4 from given values.

type Tuple5​

Tuple5 is a group of 5 elements.

type Tuple5[A, B, C, D, E any] struct {
A A
B B
C C
D D
E E
}

NewTuple5​

func NewTuple5[A, B, C, D, E any](a A, b B, c C, d D, e E) Tuple5[A, B, C, D, E]

NewTuple5 creates a Tuple5 from given values.

type Tuple6​

Tuple6 is a group of 6 elements.

type Tuple6[A, B, C, D, E, F any] struct {
A A
B B
C C
D D
E E
F F
}

NewTuple6​

func NewTuple6[A, B, C, D, E, F any](a A, b B, c C, d D, e E, f F) Tuple6[A, B, C, D, E, F]

NewTuple6 creates a Tuple6 from given values.

type Tuple7​

Tuple7 is a group of 7 elements.

type Tuple7[A, B, C, D, E, F, G any] struct {
A A
B B
C C
D D
E E
F F
G G
}

NewTuple7​

func NewTuple7[A, B, C, D, E, F, G any](a A, b B, c C, d D, e E, f F, g G) Tuple7[A, B, C, D, E, F, G]

NewTuple7 creates a Tuple7 from given values.

type Tuple8​

Tuple8 is a group of 8 elements.

type Tuple8[A, B, C, D, E, F, G, H any] struct {
A A
B B
C C
D D
E E
F F
G G
H H
}

NewTuple8​

func NewTuple8[A, B, C, D, E, F, G, H any](a A, b B, c C, d D, e E, f F, g G, h H) Tuple8[A, B, C, D, E, F, G, H]

NewTuple8 creates a Tuple8 from given values.

type Tuple9​

Tuple9 is a group of 9 elements.

type Tuple9[A, B, C, D, E, F, G, H, I any] struct {
A A
B B
C C
D D
E E
F F
G G
H H
I I
}

NewTuple9​

func NewTuple9[A, B, C, D, E, F, G, H, I any](a A, b B, c C, d D, e E, f F, g G, h H, i I) Tuple9[A, B, C, D, E, F, G, H, I]

NewTuple9 creates a Tuple9 from given values.

type Unsigned​

Unsigned is a constraint that permits any unsigned integer type. If future releases of Go add new predeclared unsigned integer types, this constraint will be modified to include them.

type Unsigned interface {
// contains filtered or unexported methods
}