From 5f9e4f6416206edce554a6de980b73f5ae5fdacb Mon Sep 17 00:00:00 2001 From: Andrew Martin Date: Thu, 23 Jun 2016 19:01:43 -0400 Subject: [PATCH] Added Internal module --- colonnade/colonnade.cabal | 1 + colonnade/src/Colonnade/Internal.hs | 14 ++++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 colonnade/src/Colonnade/Internal.hs diff --git a/colonnade/colonnade.cabal b/colonnade/colonnade.cabal index 012f334..512bbc1 100644 --- a/colonnade/colonnade.cabal +++ b/colonnade/colonnade.cabal @@ -18,6 +18,7 @@ library Colonnade.Types Colonnade.Encoding Colonnade.Decoding + Colonnade.Internal Colonnade.Internal.Ap build-depends: base >= 4.7 && < 5 diff --git a/colonnade/src/Colonnade/Internal.hs b/colonnade/src/Colonnade/Internal.hs new file mode 100644 index 0000000..727ebb5 --- /dev/null +++ b/colonnade/src/Colonnade/Internal.hs @@ -0,0 +1,14 @@ +{-# LANGUAGE DeriveFunctor #-} +module Colonnade.Internal where + +newtype EitherWrap a b = EitherWrap + { getEitherWrap :: Either a b + } deriving (Functor) + +instance Monoid a => Applicative (EitherWrap a) where + pure = EitherWrap . Right + EitherWrap (Left a1) <*> EitherWrap (Left a2) = EitherWrap (Left (mappend a1 a2)) + EitherWrap (Left a1) <*> EitherWrap (Right _) = EitherWrap (Left a1) + EitherWrap (Right _) <*> EitherWrap (Left a2) = EitherWrap (Left a2) + EitherWrap (Right f) <*> EitherWrap (Right b) = EitherWrap (Right (f b)) +