aboutsummaryrefslogtreecommitdiff
(module (algebraic-structures private stream applicative) ()
  (import scheme
          (srfi 41)
          (only (chicken base) cute)
          (chicken module)
          (only (algebraic-structures stream functor)))
  (export pure map2)
  (reexport (algebraic-structures stream functor))

  (define (pure x) (stream x))

  (define-stream (product op s1 s2)
    (if (stream-null? s1)
        stream-null
        (stream-append (stream-map (cute op (stream-car s1) <>) s2)
                       (product op (stream-cdr s1) s2))))

  (define map2 product))