A conservative library of Common Lisp utilities that supplements Alexandria with modern functional and array programming idioms.
Serapeum is a utility library for Common Lisp designed to fill gaps in the language while maintaining compatibility with existing ecosystems like Alexandria. It provides a curated collection of functions and macros inspired by other Lisp dialects and functional programming languages, serving as a practical toolkit for everyday Lisp development.
Common Lisp developers seeking a conservative, well-documented utility library that integrates seamlessly with Alexandria and the Quicklisp ecosystem, particularly those working on projects requiring enhanced sequence manipulation, compile-time exhaustiveness checking, or CLOS enhancements.
Developers choose Serapeum for its careful design that avoids duplicating functionality from other libraries, its modular subsystems for incremental adoption, and its unique features like compile-time exhaustiveness checking and internal definitions via the `local` form, which are not commonly found in other Common Lisp utility libraries.
Utilities beyond Alexandria
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Functions like runs, batches, and assort are designed for efficiency, generic sequence support, and consistent naming, as detailed in the Dividing Sequences section, avoiding weasel words like 'split' or 'group'.
Macros such as fbind and fbindrec can eliminate funcall overhead and implement advanced optimizations like those from Fixing Letrec, enabling performance gains in higher-order function usage.
Macros like etypecase-of provide compile-time warnings for non-exhaustive pattern matching on types or enums, enhancing code reliability and catching bugs early, as shown in the enum and union type examples.
Organized into subsystems (e.g., serapeum/types, serapeum/control-flow) for incremental adoption and maintains compatibility with Alexandria, avoiding duplication in the Quicklisp ecosystem.
Primarily tested on SBCL and Clozure CL, with potential issues on other Lisp implementations, as admitted in the Overview, requiring patches or community contributions for broader support.
Avoids duplicating functionality from other libraries, which means it may lack some utilities found in more extensive or aggressive utility libraries, relying on external dependencies for certain features.
Advanced features like internal definitions (local form) and function binding can lead to intricate macro expansions, which might be harder to debug or understand for developers unfamiliar with Lisp macro systems.