aboutsummaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
Diffstat (limited to 'data')
-rw-r--r--data/optional.scm7
-rw-r--r--data/writer.scm9
2 files changed, 15 insertions, 1 deletions
diff --git a/data/optional.scm b/data/optional.scm
index e71c10d..b008471 100644
--- a/data/optional.scm
+++ b/data/optional.scm
@@ -40,3 +40,10 @@
((just? this)
(match this
(($ <optional> slot) (proc slot))))))
+
+(define-method (>> (a <optional>)
+ (b <optional>))
+ (if (or (nothing? a)
+ (nothing? b))
+ (nothing)
+ b))
diff --git a/data/writer.scm b/data/writer.scm
index 462d391..93f3798 100644
--- a/data/writer.scm
+++ b/data/writer.scm
@@ -21,7 +21,14 @@
(match this (($ <writer> value monoid)
(match (proc value)
(($ <writer> nval ncontext)
- (writer nval { monoid <> ", " <> ncontext }))))))
+ (writer nval { monoid <> ncontext }))))))
+
+(define-method (>> (a <writer>)
+ (b <writer>))
+ (match a (($ <writer> _ monoid-a)
+ (match b (($ <writer> val monoid-b)
+ (writer val (<> monoid-a monoid-b))
+ )))))
(define (return-writer val)
(writer val ""))