Skip to content
/ err Public

Error handling for clojure/clojurescript based on cats library

License

Notifications You must be signed in to change notification settings

s-mage/err

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

err

[TODO: irrelevant quote with the word err]

err is a Clojure library for error handling.

Motivation you can find here and following links in the post, especially this one.

Cats is good enough in monadic errors handling, this library is mostly a couple of helpers to better interact with foreign libs (that are likely know nothing about all that monads).

Usage

Right value:

(ok 42) ; #<Right 42>

Functions that return #<Left "msg">:

(fail "msg")          ; #<Left "msg">
(fail-nil "msg" nil)  ; #<Left "msg">
(fail-empty "msg" []) ; #<Left "msg">
(fail-zero "msg" 0)   ; #<Left "msg">
(fail-ex / 1 0)       ; #<Left "Divide by zero">

(fail-nil "msg" 42)     ; #<Right 42>
(fail-empty "msg" [42]) ; #<Right [42]>
(fail-zero "msg" 42)    ; #<Right 42>
(fail-ex + 33 9)        ; 42

Check if value is failed:

(failed? (ok 1))   ; false
(failed? (fail 1)) ; true
(failed? 1)        ; false

Run function if none of arguments are failed:

(either + 2 3)                ; 5
(either + (ok 3) (ok 2))      ; 5
(either + (ok 3) (fail "eh")) ; #<Left "eh">

Same in threading macro:

(either->> 3 #(+ 2 %) #(* 2 %)) ; 10

Let analogue:

(either-let [a (ok 2) b (ok (inc a))] (+ a b))   ; 5
(either-let [a (ok 2) b (fail "eh")] (+ a b))    ; #<Left "eh">
(either-let [a (ok 2) b (fail "eh")] (+ a b) 42) ; 42

Make sure all arguments in let are wrapped into #<Right> or #<Left> (or another cats entity).

License

Copyright © 2016-2019 Sergey Smagin

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.

About

Error handling for clojure/clojurescript based on cats library

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published