fudgets-0.18.3: hsrc/utils/EitherUtils.hs
module EitherUtils where
import Data.Maybe
import Data.List(find)
type Cont c a = (a -> c) -> c
plookup p = fmap snd . find (p.fst)
-- mapfilter = Maybe.mapMaybe
-- stripMaybe = Maybe.fromJust
-- stripMaybeDef = Maybe.fromMaybe
-- isM = Maybe.isJust
--mapMaybe :: (a->b) -> Maybe a -> Maybe b
--mapMaybe = fmap
stripLeft (Left a) = Just a
stripLeft _ = Nothing
stripRight (Right b) = Just b
stripRight _ = Nothing
stripEither (Left a) = a
stripEither (Right b) = b
filterLeft = mapMaybe stripLeft
filterRight = mapMaybe stripRight
isLeft (Left _) = True
isLeft _ = False
isRight (Right _) = True
isRight _ = False
mapEither fl fr (Left l) = Left (fl l)
mapEither fl fr (Right r) = Right (fr r)
swapEither (Left x) = Right x
swapEither (Right y) = Left y
-- JSP 920929
splitEitherList [] = ([], [])
splitEitherList (x : xs) =
let (lefts, rights) = splitEitherList xs
in case x of
Left a -> (a : lefts, rights)
Right a -> (lefts, a : rights)
fromLeft (Left x) = x
fromRight (Right y) = y