;;; CHICKEN Transducers - Transducers for working with foldable data types. ;;; ;;; Copyright (c) 2023 Jeremy Steward ;;; ;;; Permission is hereby granted, free of charge, to any person obtaining a copy ;;; of this software and associated documentation files (the "Software"), to deal ;;; in the Software without restriction, including without limitation the rights ;;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ;;; copies of the Software, and to permit persons to whom the Software is ;;; furnished to do so, subject to the following conditions: ;;; ;;; The above copyright notice and this permission notice shall be included in all ;;; copies or substantial portions of the Software. ;;; ;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ;;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ;;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ;;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ;;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ;;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ;;; SOFTWARE. (define-library transducers (import (scheme)) (cond-expand (chicken-5 (import (chicken base))) (else (error "Transducers does not yet support this R7RS Scheme implementation."))) (import (transducers base) (transducers lists) (transducers vectors) (transducers ports) (transducers numbers) (transducers mappings)) ;; Re-export (transducers base) (export make-reduced reduced? unwrap preserving-reduced) (export collect-any collect-all collect-count collect-max collect-min collect-first collect-last collect-sum collect-product collect-void) (export transduce for-each) (export map filter remove drop drop-while take take-while chunks chunks-exact enumerate inspect) (export define-chain-transducer define-flatten-transducer define-interleave-transducer define-zip-transducer) (export make-transducible transducible? transducible-folder transducible-collector transducible-flattener transducible-chainer transducible-interleaver transducible-zipper) ;; Re-export (transducers lists) (export list-fold collect-list collect-reverse-list chain-list flatten-list interleave-list zip-list list-transducible) ;; Re-export (transducers vectors) (export vector-fold reverse-vector-fold collect-vector flatten-vector chain-vector interleave-vector zip-vector) (export u8vector-fold reverse-u8vector-fold collect-u8vector chain-u8vector interleave-u8vector zip-u8vector) (export u16vector-fold reverse-u16vector-fold collect-u16vector chain-u16vector interleave-u16vector zip-u16vector) (export u32vector-fold reverse-u32vector-fold collect-u32vector chain-u32vector interleave-u32vector zip-u32vector) (export u64vector-fold reverse-u64vector-fold collect-u64vector chain-u64vector interleave-u64vector zip-u64vector) (export s8vector-fold reverse-s8vector-fold collect-s8vector chain-s8vector interleave-s8vector zip-s8vector) (export s16vector-fold chain-s16vector reverse-s16vector-fold collect-s16vector interleave-s16vector zip-s16vector) (export s32vector-fold reverse-s32vector-fold collect-s32vector chain-s32vector interleave-s32vector zip-s32vector) (export s64vector-fold reverse-s64vector-fold collect-s64vector chain-s64vector interleave-s64vector zip-s64vector) (export f32vector-fold reverse-f32vector-fold collect-f32vector chain-f32vector interleave-f32vector zip-f32vector) (export f64vector-fold reverse-f64vector-fold collect-f64vector chain-f64vector interleave-f64vector zip-f64vector) (export c64vector-fold reverse-c64vector-fold collect-c64vector chain-c64vector interleave-c64vector zip-c64vector) (export c128vector-fold reverse-c128vector-fold collect-c128vector chain-c128vector interleave-c128vector zip-c128vector) (export vector-transducible u8vector-transducible u16vector-transducible u32vector-transducible u64vector-transducible s8vector-transducible s16vector-transducible s32vector-transducible s64vector-transducible f32vector-transducible f64vector-transducible c64vector-transducible c128vector-transducible) ;; Re-export (transducers ports) (export reader-fold collect-writer chain-reader interleave-reader zip-reader) ;; Re-export (transducers numbers) (export numeric-range? range counter iota range-fold fixnum-range-fold chain-range flatten-range interleave-range zip-range) ;; Re-export (transducers mappings) (export mapping-fold reverse-mapping-fold hashmap-fold collect-mapping collect-hashmap flatten-mapping flatten-reverse-mapping flatten-hashmap chain-mapping chain-reverse-mapping chain-hashmap interleave-mapping interleave-hashmap zip-mapping zip-hashmap mapping-transducible hashmap-transducible) ;; End-of-module )