-;; Copyright (c) 2014-2015 Andrey Antukh <niwi@niwi.nz>
-;; Copyright (c) 2014-2015 Alejandro Gómez <alejandro@dialelo.com>
+;; Copyright (c) 2014-2016 Andrey Antukh <niwi@niwi.nz>
+;; Copyright (c) 2014-2016 Alejandro Gómez <alejandro@dialelo.com>
 ;; All rights reserved.
 ;;
 ;; Redistribution and use in source and binary forms, with or without

  a Haskell-style left-associative fapply."
  [af & avs]
  {:pre [(seq avs)]}
  (let [ctx (ctx/get-current af)]
    (reduce (partial p/-fapply ctx) af avs)))

(defn when

      (pure either/context 1)
      ;; => #<Right [1]>
  "
  ([v] (pure (ctx/infer) v))
  ([ctx v] (p/-pure ctx v)))

(defn return
  "This is a monad version of `pure` and works
  identically to it."
  ([v] (return (ctx/infer) v))
  ([ctx v] (p/-mreturn ctx v)))

(defn bind
