Documentation
¶
Overview ¶
Package lisette provides core types for Lisette, a language inspired by Rust that compiles to Go.
For more information, visit https://lisette.run
Example (MapGet) ¶
package main
import (
"fmt"
lisette "github.com/ivov/lisette/prelude"
)
func main() {
m := map[string]int{"alice": 100, "bob": 200}
fmt.Println(lisette.MapGet(m, "alice"))
fmt.Println(lisette.MapGet(m, "charlie"))
}
Output: Some(100) None
Index ¶
- func ChannelClose[T any](ch chan T)
- func ChannelSend[T any](ch chan T, value T) (sent bool)
- func EnumeratedSliceFold[T any, U any](s []T, init U, f func(U, Tuple2[int, T]) U) U
- func EnumeratedSliceMap[T any, U any](s []T, f func(Tuple2[int, T]) U) []U
- func IsNilInterface(x any) bool
- func MapFrom[K comparable, V any](pairs []Tuple2[K, V]) map[K]V
- func OptionMapOr[T any, U any](opt Option[T], def U, f func(T) U) U
- func OptionMapOrElse[T any, U any](opt Option[T], def func() U, f func(T) U) U
- func ResultMapOr[T any, U any, E any](res Result[T, E], def U, f func(T) U) U
- func RuneAt(s string, i int) rune
- func SenderClose[T any](ch chan<- T)
- func SenderSend[T any](ch chan<- T, value T) (sent bool)
- func SliceAll[T any](s []T, f func(T) bool) bool
- func SliceFilter[T any](s []T, f func(T) bool) []T
- func SliceFold[T any, U any](s []T, init U, f func(U, T) U) U
- func SliceMap[T any, U any](s []T, f func(T) U) []U
- func SliceToAny[T any](s []T) []any
- func Substring(s string, start, end int) string
- func SubstringFrom(s string, start int) string
- func SubstringTo(s string, end int) string
- type Option
- func AssertType[T any](value any) Option[T]
- func ChannelReceive[T any](ch chan T) Option[T]
- func EnumeratedSliceFind[T any](s []T, f func(Tuple2[int, T]) bool) Option[Tuple2[int, T]]
- func MakeOptionNone[T any]() Option[T]
- func MakeOptionSome[T any](arg T) Option[T]
- func MapGet[K comparable, V any](m map[K]V, key K) Option[V]
- func OptionAndThen[T any, U any](opt Option[T], f func(T) Option[U]) Option[U]
- func OptionFlatten[U any](opt Option[Option[U]]) Option[U]
- func OptionFromCommaOk[T any](val T, ok bool) Option[T]
- func OptionFromNilable[T any](val T, isNil bool) Option[T]
- func OptionFromPointer[T any](ptr *T) Option[T]
- func OptionMap[T any, U any](opt Option[T], f func(T) U) Option[U]
- func OptionZip[T any, U any](opt Option[T], other Option[U]) Option[Tuple2[T, U]]
- func ReceiverReceive[T any](ch <-chan T) Option[T]
- func SliceFind[T any](s []T, predicate func(T) bool) Option[T]
- func SliceGet[T any](s []T, index int) Option[T]
- func (opt Option[T]) Filter(pred func(T) bool) Option[T]
- func (opt Option[T]) IsNone() bool
- func (opt Option[T]) IsSome() bool
- func (opt Option[T]) IsZero() bool
- func (opt Option[T]) MarshalJSON() ([]byte, error)
- func (opt Option[T]) OrElse(f func() Option[T]) Option[T]
- func (opt *Option[T]) Scan(src any) error
- func (opt Option[T]) String() string
- func (opt *Option[T]) Take() Option[T]
- func (opt *Option[T]) UnmarshalJSON(data []byte) error
- func (opt Option[T]) UnwrapOr(def T) T
- func (opt Option[T]) UnwrapOrElse(f func() T) T
- func (opt Option[T]) Value() (driver.Value, error)
- type OptionTag
- type PanicValue
- type Partial
- func MakePartialBoth[T any, E any](val T, err E) Partial[T, E]
- func MakePartialErr[T any, E any](arg E) Partial[T, E]
- func MakePartialOk[T any, E any](arg T) Partial[T, E]
- func PartialMap[T any, U any, E any](p Partial[T, E], f func(T) U) Partial[U, E]
- func PartialMapErr[T any, E any, F any](p Partial[T, E], f func(E) F) Partial[T, F]
- func (p Partial[T, E]) Err() Option[E]
- func (p Partial[T, E]) IsBoth() bool
- func (p Partial[T, E]) IsErr() bool
- func (p Partial[T, E]) IsOk() bool
- func (p Partial[T, E]) Ok() Option[T]
- func (p Partial[T, E]) String() string
- func (p Partial[T, E]) UnwrapOr(def T) T
- func (p Partial[T, E]) UnwrapOrElse(f func(E) T) T
- type PartialTag
- type Range
- type RangeFrom
- type RangeInclusive
- type RangeTo
- type RangeToInclusive
- type Result
- func MakeResultErr[T any, E any](arg E) Result[T, E]
- func MakeResultOk[T any, E any](arg T) Result[T, E]
- func OptionOkOr[T any, E any](opt Option[T], err E) Result[T, E]
- func OptionOkOrElse[T any, E any](opt Option[T], f func() E) Result[T, E]
- func RecoverBlock[T any](f func() T) Result[T, PanicValue]
- func ResultAndThen[T any, U any, E any](res Result[T, E], f func(T) Result[U, E]) Result[U, E]
- func ResultMap[T any, U any, E any](res Result[T, E], f func(T) U) Result[U, E]
- func ResultMapErr[T any, E any, F any](res Result[T, E], f func(E) F) Result[T, F]
- func ResultOrElse[T any, E any, F any](res Result[T, E], f func(E) Result[T, F]) Result[T, F]
- type ResultTag
- type Tuple2
- type Tuple3
- type Tuple4
- type Tuple5
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ChannelClose ¶
func ChannelClose[T any](ch chan T)
func ChannelSend ¶
func EnumeratedSliceFold ¶
func EnumeratedSliceMap ¶
func IsNilInterface ¶ added in v0.1.3
IsNilInterface reports whether an interface value is nil or contains a nil pointer (typed nil). Returns true for both cases.
func MapFrom ¶
func MapFrom[K comparable, V any](pairs []Tuple2[K, V]) map[K]V
func OptionMapOr ¶
func OptionMapOrElse ¶
func RuneAt ¶ added in v0.2.0
RuneAt returns the rune at rune-index i in s. Panics on out-of-range i.
func SenderClose ¶
func SenderClose[T any](ch chan<- T)
func SenderSend ¶
func SliceFilter ¶
func SliceToAny ¶ added in v0.1.14
func Substring ¶ added in v0.2.0
Substring returns s[start:end] in rune indices. Panics on bad bounds.
func SubstringFrom ¶ added in v0.2.0
SubstringFrom returns s[start:] in rune indices. Panics on bad bounds.
func SubstringTo ¶ added in v0.2.0
SubstringTo returns s[:end] in rune indices. Panics on bad bounds.
Types ¶
type Option ¶
Example ¶
package main
import (
"fmt"
lisette "github.com/ivov/lisette/prelude"
)
func main() {
some := lisette.MakeOptionSome(42)
none := lisette.MakeOptionNone[int]()
fmt.Println(some.IsSome())
fmt.Println(none.IsNone())
fmt.Println(some.UnwrapOr(0))
fmt.Println(none.UnwrapOr(0))
}
Output: true true 42 0
func AssertType ¶
func ChannelReceive ¶
func EnumeratedSliceFind ¶
func MakeOptionNone ¶
func MakeOptionSome ¶
func MapGet ¶
func MapGet[K comparable, V any](m map[K]V, key K) Option[V]
func OptionFromCommaOk ¶ added in v0.1.20
OptionFromCommaOk wraps a Go comma-ok pair `(value, ok)` into an `Option[T]`.
func OptionFromNilable ¶ added in v0.1.20
OptionFromNilable wraps a Go nilable `T` (pointer, function, interface, map, slice, channel) into an `Option[T]`.
func OptionFromPointer ¶ added in v0.1.25
OptionFromPointer wraps a Go `*T` into an `Option[T]`, dereferencing the pointer for the Some branch. Used when reading Go-imported struct fields declared `*T` (T value-typed) — the Lisette typedef is `Option<T>`.
func OptionMap ¶
Example ¶
package main
import (
"fmt"
lisette "github.com/ivov/lisette/prelude"
)
func main() {
opt := lisette.MakeOptionSome(21)
doubled := lisette.OptionMap(opt, func(v int) int { return v * 2 })
fmt.Println(doubled)
}
Output: Some(42)
func ReceiverReceive ¶
func (Option[T]) MarshalJSON ¶
func (*Option[T]) UnmarshalJSON ¶
func (Option[T]) UnwrapOrElse ¶
func (opt Option[T]) UnwrapOrElse(f func() T) T
type PanicValue ¶
func (PanicValue) AsError ¶
func (p PanicValue) AsError() Option[error]
func (PanicValue) Message ¶
func (p PanicValue) Message() string
func (PanicValue) StackTrace ¶
func (p PanicValue) StackTrace() string
func (PanicValue) String ¶
func (p PanicValue) String() string
type Partial ¶ added in v0.1.3
type Partial[T any, E any] struct { Tag PartialTag OkVal T ErrVal E }
func MakePartialBoth ¶ added in v0.1.3
func MakePartialErr ¶ added in v0.1.3
func MakePartialOk ¶ added in v0.1.3
func PartialMap ¶ added in v0.1.3
func PartialMapErr ¶ added in v0.1.3
func (Partial[T, E]) UnwrapOrElse ¶ added in v0.1.3
func (p Partial[T, E]) UnwrapOrElse(f func(E) T) T
type PartialTag ¶ added in v0.1.3
type PartialTag int
const ( PartialOk PartialTag = iota PartialErr PartialBoth )
type RangeInclusive ¶
type RangeInclusive[T any] struct { Start T End T }
type RangeToInclusive ¶
type RangeToInclusive[T any] struct { End T }
type Result ¶
Example ¶
package main
import (
"fmt"
lisette "github.com/ivov/lisette/prelude"
)
func main() {
ok := lisette.MakeResultOk[int, string](42)
err := lisette.MakeResultErr[int, string]("something went wrong")
fmt.Println(ok.IsOk())
fmt.Println(err.IsErr())
fmt.Println(ok.UnwrapOr(0))
fmt.Println(err.UnwrapOr(0))
}
Output: true true 42 0
func MakeResultErr ¶
func MakeResultOk ¶
func RecoverBlock ¶
func RecoverBlock[T any](f func() T) Result[T, PanicValue]
func ResultAndThen ¶
func ResultMapErr ¶
func ResultOrElse ¶
func (Result[T, E]) UnwrapOrElse ¶
func (res Result[T, E]) UnwrapOrElse(f func(E) T) T