úÎB¦?…     portable provisionalekmett@gmail.com Safe-InferredThe  function returns ! iff its argument is of the form Left _. Using  Control.Lens:     "a has _Left isLeft (Left 12)TrueisLeft (Right 12)FalseThe  function returns ! iff its argument is of the form Right _. Using  Control.Lens:     "a has _Right isRight (Left 12)FalseisRight (Right 12)TrueExtracts the element out of a  and 0 throws an error if its argument take the form  _. Using  Control.Lens:     x "a x^?!_Left fromLeft' (Left 12)12Extracts the element out of a  and 0 throws an error if its argument take the form  _. Using  Control.Lens:     x "a x^?!_Right fromRight' (Right 12)12The E function takes two functions and applies the first if iff the value  takes the form  _, and the second if the value takes the form  _. Using Data.Bifunctor:     = bimap Using  Control.Arrow:     = () mapBoth (*2) (*3) (Left 4)Left 8mapBoth (*2) (*3) (Right 4)Right 12The = function takes a function and applies it to an Either value  iff the value takes the form 'Left _'. Using Data.Bifunctor:     = first Using  Control.Arrow:     = () Using  Control.Lens:     = over _Left mapLeft (*2) (Left 4)Left 8mapLeft (*2) (Right "hello") Right "hello"The = function takes a function and applies it to an Either value  iff the value takes the form 'Left _'. Using Data.Bifunctor:     = first Using  Control.Arrow:     = () Using  Control.Lens:     = over _Right mapRight (*2) (Left "hello") Left "hello"mapRight (*2) (Right 4)Right 8The  function takes an - value and a function which returns a monad. C The monad is only executed when the given argument takes the form Left _ , otherwise  it does nothing. Using  Control.Lens:     "a forOf_ _Left whenLeft (Left 12) print12The  function takes an - value and a function which returns a monad. C The monad is only executed when the given argument takes the form Right _ , otherwise  it does nothing. Using  Data.Foldable:     "a forM_ Using  Control.Lens:     "a forOf_ _Right whenRight (Right 12) print12  A synonym of .  A synonym of . %Extract the left value or a default.      "a   fromLeft "hello" (Right 42)"hello"fromLeft "hello" (Left "world")"world" &Extract the right value or a default.      b "a  b  !fromRight "hello" (Right "world")"world"fromRight "hello" (Left 42)"hello" Maybe get the  side of an .      "a   (  ) Using  Control.Lens:      "a preview _Left    x "a x^?_Left leftToMaybe (Left 12)Just 12leftToMaybe (Right 12)NothingMaybe get the  side of an .     "a  (  )  Using  Control.Lens:     "a preview _Right   x "a x^?_Right rightToMaybe (Left 12)NothingrightToMaybe (Right 12)Just 12     MPTCs provisionalEdward Kmett <ekmett@gmail.com> Trustworthy is a version of  that does not  require a spurious ! instance for the   case.  is a perfectly usable " without such a constraint. ErrorT is ' not the generalization of the current  monad, it is something else. NThis is necessary for both theoretical and practical reasons. For instance an M apomorphism is the generalized anamorphism for this Monad, but it cannot be  written with ErrorT. )In addition to the combinators here, the errors package provides a large 3 number of combinators for working with this type. OGiven a pair of actions, one to perform in case of failure, and one to perform  in case of success, run an  and get back a monadic result.  Analogous to . Equivalent to #.  Analogous to . Equivalent to $. #Map over both failure and success. 8Map the unwrapped computation using the given function.    ( f m) = f ( m) Lift an  into an  !%&'()*+,-./0123456789:;<  %&'()*+,-./0123456789:;<=      !"#!"$!"%!"&!'(!)*!'+!),-.!'/012!'3456789:;<=>?@ABCDEFGHIJKL either-4.0Data.Either.CombinatorsControl.Monad.Trans.Either Control.Arrow+++leftrightControl.Monad.Trans.ErrorErrorTisLeftisRight fromLeft' fromRight'mapBothmapLeftmapRightwhenLeft whenRight unlessLeft unlessRightfromLeft fromRight leftToMaybe rightToMaybeEitherT runEitherTeitherT bimapEitherT mapEitherT hoistEitherghc-prim GHC.TypesTruebase Data.EitherLeftRightEithereitherGHC.Baseid Data.MaybeJustconstNothingtransformers-0.3.0.0ErrorMonad mtl-2.1.2Control.Monad.Error.Class throwErrorreturn$fTraversableEitherT$fFoldableEitherT$fMonadRandomEitherT$fMonadWritersEitherT$fMonadStatesEitherT$fMonadReaderrEitherT$fMonadContEitherT$fMonadIOEitherT$fMonadTransEitherT$fMonadFixEitherT$fMonadErroreEitherT$fMonadEitherT $fBindEitherT $fAltEitherT$fSemigroupEitherT$fMonadPlusEitherT$fAlternativeEitherT$fApplicativeEitherT$fApplyEitherT$fFunctorEitherT $fOrdEitherT $fEqEitherT $fReadEitherT $fShowEitherT