From 0a8c190d0025612b5e25cb2dc4910a9b1ae280b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20G=C3=B3mez?= <alejandro@dialelo.com> Date: Sat, 15 Aug 2015 12:37:19 +0200 Subject: [PATCH] WIP: applicative instance for maybe transformer --- src/cats/monad/maybe.cljc | 19 +++++++++++++++++++ test/cats/monad/maybe_spec.cljc | 12 ++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/cats/monad/maybe.cljc b/src/cats/monad/maybe.cljc index 8251f49..08e1305 100644 --- a/src/cats/monad/maybe.cljc +++ b/src/cats/monad/maybe.cljc @@ -235,6 +235,25 @@ #(p/fmap maybe-monad f %) fv)) + p/Applicative + (pure [_ v] + (p/mreturn inner-monad (just v))) + + (fapply [_ af av] + (p/mbind inner-monad + af + (fn [mf] + (p/mbind maybe-monad + mf + (fn [f] + (p/mbind inner-monad + av + (fn [mv] + (p/mbind maybe-monad + mv + (fn [v] + (p/mreturn inner-monad (just (f v)))))))))))) + p/Monad (mreturn [m v] (p/mreturn inner-monad (just v))) diff --git a/test/cats/monad/maybe_spec.cljc b/test/cats/monad/maybe_spec.cljc index 622f1f5..f490a8a 100644 --- a/test/cats/monad/maybe_spec.cljc +++ b/test/cats/monad/maybe_spec.cljc @@ -72,6 +72,18 @@ (m/with-monad maybe-vector-transformer (m/return 2)))) + (t/is (= [(maybe/just 42)] + (m/with-monad maybe-vector-transformer + (m/fapply [(maybe/just inc)] [(maybe/just 41)])))) + + (t/is (= [(maybe/just 42) + (maybe/just 99) + (maybe/just "41") + (maybe/just "98")] + (m/with-monad maybe-vector-transformer + (m/fapply [(maybe/just inc) (maybe/just str)] + [(maybe/just 41) (maybe/just 98)])))) + (t/is (= [(maybe/just 1) (maybe/just 2) (maybe/just 2)