This package browser is in early development. Mind the rough edges.

go-github-com-bradenaw-juniper 0.15.3

Extensions to the Go standard library using generics

Juniper is a library of extensions to the Go standard library using generics, including containers, iterators, and streams.

  • container/tree contains a Map and Set that keep elements in sorted order. They are implemented using a B-tree, which performs better than a binary search tree.

  • container/deque contains a double-ended queue implemented with a ring buffer.

  • container/xheap contains a min-heap similar to the standard library's container/heap but more ergonomic, along with a PriorityQueue that allows setting priorities by key.

  • container/xlist contains a linked-list similar to the standard library's container/list, but type-safe.

  • xslices contains some commonly-used slice operations, like Chunk, Reverse, Clear, and Join.

  • iterator contains an iterator interface used by the containers, along with functions to manipulate them, like Map, While, and Reduce.

  • stream contains a stream interface, which is an iterator that can fail. Useful for iterating over collections that require I/O. It has most of the same combinators as iterator, plus some extras like Pipe and Batch.

  • parallel contains some shorthand for common uses of goroutines to process slices, iterators, and streams in parallel, like parallel.MapStream.

  • xsort contains extensions to the standard library package sort. Notably, it also has the definition for xsort.Less, which is how custom orderings can be defined for sorting and also for ordered collections like from container/tree.

  • You can probably guess what's in the packages xerrors, xmath, xmath/xrand, xsync, and xtime.

Installation

Install go-github-com-bradenaw-juniper 0.15.3 as follows:

guix install go-github-com-bradenaw-juniper@0.15.3

Or install the latest version:

guix install go-github-com-bradenaw-juniper

You can also install packages in augmented, pure or containerized environments for development or simply to try them out without polluting your user profile. See the guix shell documentation for more information.