-- Copyright 2023 Lennart Augustsson -- See LICENSE file for full license. module Data.Either(module Data.Either) where import Prelude() -- do not import Prelude import Primitives import Data.Bool import Data.Eq import Data.Function import Data.Functor import Data.Int import Data.Ord import Text.Show data Either a b = Left a | Right b instance forall a b . (Eq a, Eq b) => Eq (Either a b) where Left a == Left a' = a == a' Right b == Right b' = b == b' _ == _ = False either :: forall a b r . (a -> r) -> (b -> r) -> Either a b -> r either f _ (Left a) = f a either _ f (Right b) = f b isLeft :: forall a b . Either a b -> Bool isLeft (Left _) = True isLeft (Right _) = False isRight :: forall a b . Either a b -> Bool isRight (Left _) = False isRight (Right _) = True instance forall a b . (Show a, Show b) => Show (Either a b) where showsPrec p (Left a) = showParen (p>=appPrec1) (showString "Left " . showsPrec appPrec1 a) showsPrec p (Right b) = showParen (p>=appPrec1) (showString "Right " . showsPrec appPrec1 b) instance forall a . Functor (Either a) where fmap _ (Left a) = Left a fmap f (Right b) = Right (f b)