monad

package
v0.0.0-...-d2f97bb Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 5, 2025 License: MIT Imports: 1 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Reduce

func Reduce[T any, Tr any](m Monad[T], f func(Tr, T) (Tr, bool), i Tr) Tr

Types

type Iterator

type Iterator[T any] = func() (val T, ok bool) // TODO - make Iterator[T] = iter.Seq[T]

type Monad

type Monad[T any] func() Iterator[T]
var Fibonacci Monad[uint] = func() Iterator[uint] {
	a, b := uint(0), uint(1)
	return func() (uint, bool) {
		a, b = b, a+b
		return a, true
	}
}

Fibonacci - Fibonacci sequence

var Natural Monad[uint] = func() Iterator[uint] {
	var n uint = 0
	return func() (uint, bool) {
		n++
		return n - 1, true
	}
}
var Prime Monad[uint] = Filter(oddNonUnit, func(n uint) bool {
	return 0 == Reduce(oddNonUnit, func(numFactors uint, m uint) (uint, bool) {
		if numFactors > 0 {
			return numFactors, false
		}
		if m*m > n {
			return numFactors, false
		}
		if m%n == 0 {
			return numFactors + 1, true
		} else {
			return numFactors, true
		}
	}, 0)
}).Insert(2)

Prime -

func Bind

func Bind[Tx any, Ty any](mx Monad[Tx], f func(Tx) Monad[Ty]) Monad[Ty]

Bind is equivalent to flatMap

func Filter

func Filter[T any](m Monad[T], f func(T) bool) Monad[T]

func Fold

func Fold[T any, Ta any](m Monad[T], f func(Ta, T) (Ta, bool), i Ta) Monad[Ta]

func FromChan

func FromChan[T any](chFunc func() <-chan T) Monad[T]

func FromIter

func FromIter[T any](iFunc func() iter.Seq[T]) Monad[T]

func Map

func Map[Ta any, Tb any](ma Monad[Ta], f func(Ta) Tb) Monad[Tb]

func None

func None[T any]() Monad[T]

None is equivalent to a monad of length 0

func Replicate

func Replicate[T any](v T) Monad[T]

func (Monad[T]) Chan

func (m Monad[T]) Chan() <-chan T

func (Monad[T]) DropAtMost

func (m Monad[T]) DropAtMost(n int) Monad[T]

func (Monad[T]) Head

func (m Monad[T]) Head() (val T, ok bool)

func (Monad[T]) Insert

func (m Monad[T]) Insert(vs ...T) Monad[T]

Insert is equivalent to a monad of length n

func (Monad[T]) Iter

func (m Monad[T]) Iter(yield func(T) bool)

func (Monad[T]) Last

func (m Monad[T]) Last() (val T, ok bool)

func (Monad[T]) Slice

func (m Monad[T]) Slice() []T

func (Monad[T]) TakeAtMost

func (m Monad[T]) TakeAtMost(n int) Monad[T]

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL