aboutsummaryrefslogtreecommitdiff
path: root/algebraic-structures.applicative.make.scm
diff options
context:
space:
mode:
Diffstat (limited to 'algebraic-structures.applicative.make.scm')
-rw-r--r--algebraic-structures.applicative.make.scm28
1 files changed, 0 insertions, 28 deletions
diff --git a/algebraic-structures.applicative.make.scm b/algebraic-structures.applicative.make.scm
deleted file mode 100644
index 10a5663..0000000
--- a/algebraic-structures.applicative.make.scm
+++ /dev/null
@@ -1,28 +0,0 @@
-(functor ((algebraic-structures applicative make) (A (pure map map2)))
- (pure map map2 map* apply)
- (import (rename scheme (map scheme:map) (apply scheme:apply))
- (only (chicken base) sub1 add1 foldl case-lambda)
- A
- matchable)
-
- (define (curry-n f n)
- (let rec ((i n)
- (k (lambda (args)
- (scheme:apply f args))))
- (if (= i 1)
- (lambda (x) (k (list x)))
- (lambda (x)
- (rec (sub1 i)
- (lambda (args)
- (k (cons x args))))))))
-
- (define map*
- (case-lambda
- ((f x) (map f x))
- ((f x y) (map2 f x y))
- ((f x . xs)
- (let ((g (curry-n f (add1 (length xs)))))
- (foldl apply (apply (pure g) x) xs)))))
-
- (define (apply a1 a2)
- (map2 (lambda (f x) (f x)) a1 a2)))