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 +2/−1
- src/Data/Result.hs +41/−2
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