aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--maybedoer/maybedoer.go24
1 files changed, 24 insertions, 0 deletions
diff --git a/maybedoer/maybedoer.go b/maybedoer/maybedoer.go
new file mode 100644
index 0000000..d75eaa5
--- /dev/null
+++ b/maybedoer/maybedoer.go
@@ -0,0 +1,24 @@
+package maybedoer
+
+// Impl sequences a set of actions to be performed via calls to
+// `Maybe` such that any previous error prevents new actions from being
+// performed.
+//
+// This is, conceptually, just a go-ification of the Maybe monad.
+type Impl struct {
+ err error
+}
+
+// Maybe performs `f` if no previous call to a Maybe'd action resulted
+// in an error
+func (c *Impl) Maybe(f func() error) {
+ if c.err == nil {
+ c.err = f()
+ }
+}
+
+// Error returns the first error encountered in the Error chain.
+func (c *Impl) Error() error {
+ return c.err
+}
+