packages feed

result 0.2.0.0 → 0.2.1.0

raw patch · 2 files changed

+43/−3 lines, 2 filesdep +bifunctorsPVP ok

version bump matches the API change (PVP)

Dependencies added: bifunctors

API changes (from Hackage documentation)

+ Data.Result: instance Data.Bifoldable.Bifoldable Data.Result.Result
+ Data.Result: instance Data.Bifunctor.Bifunctor Data.Result.Result
+ Data.Result: instance Data.Bitraversable.Bitraversable Data.Result.Result
+ Data.Result: instance Data.Foldable.Foldable (Data.Result.Result e)
+ Data.Result: instance Data.Traversable.Traversable (Data.Result.Result e)

Files

result.cabal view
@@ -1,5 +1,5 @@ name:                result-version:             0.2.0.0+version:             0.2.1.0 synopsis:            Encode success or at least one error homepage:            https://github.com/srijs/haskell-result license:             MIT@@ -16,6 +16,7 @@   hs-source-dirs:      src   exposed-modules:     Data.Result   build-depends:       base >= 4 && < 5,+                       bifunctors,                        semigroups,                        keys   default-language:    Haskell2010
src/Data/Result.hs view
@@ -7,16 +7,28 @@   ) where  -import Data.Monoid+import Data.Bifunctor+import Data.Bifoldable+import Data.Bitraversable import Data.Key import qualified Data.List.NonEmpty as NonEmpty+import Data.Monoid   newtype Result e a =     Result (Either (NonEmpty.NonEmpty e) a)-  deriving (Eq, Ord, Show, Functor, Applicative, Monad)+  deriving (Eq, Ord, Show, Functor, Applicative, Monad, Foldable)  +instance Traversable (Result e) where+  traverse f (Result e) =+    case e of+      Left es ->+        pure (Result (Left es))+      Right a ->+        Result . Right <$> f a++ instance Zip (Result e) where   zipWith f mea meb =     case (mea, meb) of@@ -24,6 +36,33 @@         Result (Right (f eaa eba))       _ ->         Result (Left (NonEmpty.fromList (errors mea <> errors meb)))+++instance Bifunctor Result where+  bimap f g (Result e) =+    case e of+      Left es ->+        Result (Left (fmap f es))+      Right a ->+        Result (Right (g a))+++instance Bifoldable Result where+  bifoldMap f g (Result e) =+    case e of+      Left es ->+        foldMap f es+      Right a ->+        g a+++instance Bitraversable Result where+  bitraverse f g (Result e) =+    case e of+      Left es ->+        Result . Left <$> traverse f es+      Right a ->+        Result . Right <$> g a   raise :: e -> Result e a