diff options
| -rw-r--r-- | maybedoer/maybedoer.go | 24 |
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 +} + |
