aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristine Dodrill <me@christine.website>2019-04-05 16:28:20 +0000
committerChristine Dodrill <me@christine.website>2019-04-05 16:28:20 +0000
commit6aa771c3a3cdd99a1b82cf48b1d37edc8ded0e06 (patch)
treeefe9d8d522527d8ca6c1c6fb271630323b8359dd
parent53de3948151edcf002d42fb4879e07ccb0be0969 (diff)
downloadx-6aa771c3a3cdd99a1b82cf48b1d37edc8ded0e06.tar.xz
x-6aa771c3a3cdd99a1b82cf48b1d37edc8ded0e06.zip
maybedoer: new package
-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
+}
+