Data validation and type checking (supposedly) make for more correct code. And faster code too, sometimes. And, in rare cases, code that's easier to follow than the un-checked one. Unfortunately, Scheme does not have many (type-)checking primitives out of the box. This SRFI provides some, with the aim of allowing more performant and correct code with minimum effort on the user side. Both (manual) argument checking/validation (check-arg) and return value(s) (values-checked) checking/coercion are provided. Syntax sugar like lambda-checked and define-checked is added on top.
Utility procedures provided by this SRFI in addition to the R6RS API may be categorized as follows:
Constructors:
alist->eq-hashtable,alist->eqv-hashtable,alist->hashtableAccess and mutation:
hashtable-lookup,hashtable-intern!Copying:
hashtable-empty-copyKey/value collections:
hashtable-values,hashtable-key-list,hashtable-value-list,hashtable-entry-listsIteration:
hashtable-walk,hashtable-update-all!,hashtable-prune!,hashtable-merge!,hashtable-sum,hashtable-map->lset,hashtable-findMiscellaneous:
hashtable-empty?,hashtable-pop!,hashtable-inc!,hashtable-dec!
Procedures in this SRFI are drawn primarily from SRFI 69 and R6RS. In addition, the following sources are acknowledged:
hash-table-mutable?procedure and the second argument ofhash-table-copy(which allows the creation of immutable hash tables) are from R6RS, renamed in the style of this SRFI.hash-table-intern!procedure is from Racket, renamed in the style of this SRFI.hash-table-findprocedure is a modified version oftable-searchin Gambit.procedures
hash-table-unfoldandhash-table-countwere suggested by SRFI 1.procedures
hash-table=?andhash-table-mapwere suggested by Haskell'sData.Map.Strictmodule.procedure
hash-table-map->listis from Guile.
The procedures hash-table-empty?, hash-table-empty-copy, hash-table-pop!, hash-table-map!, hash-table-intersection!, hash-table-difference!, and hash-table-xor! were added for convenience and completeness.
Pre-built Guile for bootstrapping purposes.
Guile Shapefile is a Guile library for reading shapefiles.
Provides bindings for GNOME's libnotify C library to Guile
Provides bindings for GNOME's libnotify C library to Guile
Guile-colorized provides you with a colorized REPL for GNU Guile.
Guile-websocket provides an implementation of the WebSocket protocol as defined by RFC 6455.
Guile Hoot is a WebAssembly compiler backend for GNU Guile and standalone WASM toolchain.
Guile-OpenGL is a library for Guile that provides bindings to the OpenGL graphics API.
Guile Documentá is a command-line program and accompanying library to generate API documentation for GNU Guile projects.
This package provides an implementation of ActivityStreams and ActivityPub in Guile. It includes a full (currently demo) web server.
guile-dbi is a library for Guile that provides a convenient interface to SQL databases. This package implements the interface for MySQL.
This Guile library provides tools for reading, comparing, and writing Semantic Versions. It also includes ranges in the style of the Node Package Manager (NPM).
This package provides Guile bindings to GnuTLS, a library implementation the TLS protocol. It supersedes the Guile bindings that were formerly provided as part of GnuTLS.
This package provides functions to generate Guix manifests interactively. It works by scanning an alist of package categories, to ask the user which package sets would they like to install from it.
This package provides bindings for GNU Parted library, a C library allowing disk partition tables creation and manipulation. The bindings are written in pure Scheme by using Guile's foreign function interface.
Guile-Plotutils is a Guile binding to the venerable GNU Plotutils plotting and graphing library. If you want to make graphs that look like you went to university in the 1990s, this is the library for you.
Guile-Gcrypt provides a Guile interface to a subset of the GNU Libgcrypt crytographic library. It provides modules for cryptographic hash functions, message authentication codes (MAC), public-key cryptography, strong randomness, and more. It is implemented using the foreign function interface (FFI) of Guile.
This package provides Guile FFI bindings for CBLAS, the library of linear algebra subprograms.
To use the bindings, import (ffi cblas). CBLAS will be loaded from the default dynamic library path. There are up to three bindings for each function: raw, typed, and functional.
guile-xapian provides Guile bindings for Xapian, a search engine library. Xapian is a highly adaptable toolkit which allows developers to easily add advanced indexing and search facilities to their own applications. It has built-in support for several families of weighting models and also supports a rich set of boolean query operators.
Guile Config is a library providing a declarative approach to application configuration specification. The library provides clean configuration declaration forms, and processors that take care of: configuration file creation; configuration file parsing; command-line parameter parsing using getopt-long; basic GNU command-line parameter generation (--help, --usage, --version); automatic output generation for the above command-line parameters.
Chickadee is a game development toolkit for Guile Scheme built on top of SDL2 and OpenGL. Chickadee aims to provide all the features that parenthetically inclined game developers need to make 2D (and eventually 3D) games in Scheme, such as:
extensible, fixed-timestep game loop
OpenGL-based rendering engine
keyboard, mouse, controller input
REPL-driven development model