module Text.Pandoc.Readers.Odt.Generic.Fallible where
type Failure = ()
type Fallible a = Either Failure a
maybeToEither :: Maybe a -> Fallible a
maybeToEither :: Maybe a -> Fallible a
maybeToEither (Just a
a) = a -> Fallible a
forall a b. b -> Either a b
Right a
a
maybeToEither Maybe a
Nothing = () -> Fallible a
forall a b. a -> Either a b
Left ()
eitherToMaybe :: Either _l a -> Maybe a
eitherToMaybe :: Either _l a -> Maybe a
eitherToMaybe (Left _l
_) = Maybe a
forall a. Maybe a
Nothing
eitherToMaybe (Right a
a) = a -> Maybe a
forall a. a -> Maybe a
Just a
a
fromLeft :: (a -> b) -> Either a b -> b
fromLeft :: (a -> b) -> Either a b -> b
fromLeft a -> b
f (Left a
a) = a -> b
f a
a
fromLeft a -> b
_ (Right b
b) = b
b
recover :: a -> Either _f a -> a
recover :: a -> Either _f a -> a
recover a
a (Left _f
_) = a
a
recover a
_ (Right a
a) = a
a
failWith :: failure -> Either failure _x
failWith :: failure -> Either failure _x
failWith failure
f = failure -> Either failure _x
forall a b. a -> Either a b
Left failure
f
failEmpty :: (Monoid failure) => Either failure _x
failEmpty :: Either failure _x
failEmpty = failure -> Either failure _x
forall a b. a -> Either a b
failWith failure
forall a. Monoid a => a
mempty
succeedWith :: a -> Either _x a
succeedWith :: a -> Either _x a
succeedWith = a -> Either _x a
forall a b. b -> Either a b
Right
collapseEither :: Either failure (Either failure x)
-> Either failure x
collapseEither :: Either failure (Either failure x) -> Either failure x
collapseEither (Left failure
f ) = failure -> Either failure x
forall a b. a -> Either a b
Left failure
f
collapseEither (Right (Left failure
f)) = failure -> Either failure x
forall a b. a -> Either a b
Left failure
f
collapseEither (Right (Right x
x)) = x -> Either failure x
forall a b. b -> Either a b
Right x
x
chooseMax :: (Monoid a, Monoid b) => Either a b -> Either a b -> Either a b
chooseMax :: Either a b -> Either a b -> Either a b
chooseMax = (b -> b -> b) -> Either a b -> Either a b -> Either a b
forall a b.
Monoid a =>
(b -> b -> b) -> Either a b -> Either a b -> Either a b
chooseMaxWith b -> b -> b
forall a. Monoid a => a -> a -> a
mappend
chooseMaxWith :: (Monoid a) => (b -> b -> b)
-> Either a b
-> Either a b
-> Either a b
chooseMaxWith :: (b -> b -> b) -> Either a b -> Either a b -> Either a b
chooseMaxWith b -> b -> b
(><) (Right b
a) (Right b
b) = b -> Either a b
forall a b. b -> Either a b
Right (b -> Either a b) -> b -> Either a b
forall a b. (a -> b) -> a -> b
$ b
a b -> b -> b
>< b
b
chooseMaxWith b -> b -> b
_ (Left a
a) (Left a
b) = a -> Either a b
forall a b. a -> Either a b
Left (a -> Either a b) -> a -> Either a b
forall a b. (a -> b) -> a -> b
$ a
a a -> a -> a
forall a. Monoid a => a -> a -> a
`mappend` a
b
chooseMaxWith b -> b -> b
_ (Right b
a) Either a b
_ = b -> Either a b
forall a b. b -> Either a b
Right b
a
chooseMaxWith b -> b -> b
_ Either a b
_ (Right b
b) = b -> Either a b
forall a b. b -> Either a b
Right b
b
class ChoiceVector v where
spreadChoice :: v (Either f a) -> Either f (v a)
instance ChoiceVector ((,) a) where
spreadChoice :: (a, Either f a) -> Either f (a, a)
spreadChoice (a
_, Left f
f) = f -> Either f (a, a)
forall a b. a -> Either a b
Left f
f
spreadChoice (a
x, Right a
y) = (a, a) -> Either f (a, a)
forall a b. b -> Either a b
Right (a
x,a
y)
newtype SuccessList a = SuccessList { SuccessList a -> [a]
collectNonFailing :: [a] }
deriving ( SuccessList a -> SuccessList a -> Bool
(SuccessList a -> SuccessList a -> Bool)
-> (SuccessList a -> SuccessList a -> Bool) -> Eq (SuccessList a)
forall a. Eq a => SuccessList a -> SuccessList a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SuccessList a -> SuccessList a -> Bool
$c/= :: forall a. Eq a => SuccessList a -> SuccessList a -> Bool
== :: SuccessList a -> SuccessList a -> Bool
$c== :: forall a. Eq a => SuccessList a -> SuccessList a -> Bool
Eq, Eq (SuccessList a)
Eq (SuccessList a)
-> (SuccessList a -> SuccessList a -> Ordering)
-> (SuccessList a -> SuccessList a -> Bool)
-> (SuccessList a -> SuccessList a -> Bool)
-> (SuccessList a -> SuccessList a -> Bool)
-> (SuccessList a -> SuccessList a -> Bool)
-> (SuccessList a -> SuccessList a -> SuccessList a)
-> (SuccessList a -> SuccessList a -> SuccessList a)
-> Ord (SuccessList a)
SuccessList a -> SuccessList a -> Bool
SuccessList a -> SuccessList a -> Ordering
SuccessList a -> SuccessList a -> SuccessList a
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. Ord a => Eq (SuccessList a)
forall a. Ord a => SuccessList a -> SuccessList a -> Bool
forall a. Ord a => SuccessList a -> SuccessList a -> Ordering
forall a. Ord a => SuccessList a -> SuccessList a -> SuccessList a
min :: SuccessList a -> SuccessList a -> SuccessList a
$cmin :: forall a. Ord a => SuccessList a -> SuccessList a -> SuccessList a
max :: SuccessList a -> SuccessList a -> SuccessList a
$cmax :: forall a. Ord a => SuccessList a -> SuccessList a -> SuccessList a
>= :: SuccessList a -> SuccessList a -> Bool
$c>= :: forall a. Ord a => SuccessList a -> SuccessList a -> Bool
> :: SuccessList a -> SuccessList a -> Bool
$c> :: forall a. Ord a => SuccessList a -> SuccessList a -> Bool
<= :: SuccessList a -> SuccessList a -> Bool
$c<= :: forall a. Ord a => SuccessList a -> SuccessList a -> Bool
< :: SuccessList a -> SuccessList a -> Bool
$c< :: forall a. Ord a => SuccessList a -> SuccessList a -> Bool
compare :: SuccessList a -> SuccessList a -> Ordering
$ccompare :: forall a. Ord a => SuccessList a -> SuccessList a -> Ordering
$cp1Ord :: forall a. Ord a => Eq (SuccessList a)
Ord, Int -> SuccessList a -> ShowS
[SuccessList a] -> ShowS
SuccessList a -> String
(Int -> SuccessList a -> ShowS)
-> (SuccessList a -> String)
-> ([SuccessList a] -> ShowS)
-> Show (SuccessList a)
forall a. Show a => Int -> SuccessList a -> ShowS
forall a. Show a => [SuccessList a] -> ShowS
forall a. Show a => SuccessList a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SuccessList a] -> ShowS
$cshowList :: forall a. Show a => [SuccessList a] -> ShowS
show :: SuccessList a -> String
$cshow :: forall a. Show a => SuccessList a -> String
showsPrec :: Int -> SuccessList a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> SuccessList a -> ShowS
Show )
instance ChoiceVector SuccessList where
spreadChoice :: SuccessList (Either f a) -> Either f (SuccessList a)
spreadChoice = SuccessList a -> Either f (SuccessList a)
forall a b. b -> Either a b
Right (SuccessList a -> Either f (SuccessList a))
-> (SuccessList (Either f a) -> SuccessList a)
-> SuccessList (Either f a)
-> Either f (SuccessList a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [a] -> SuccessList a
forall a. [a] -> SuccessList a
SuccessList ([a] -> SuccessList a)
-> (SuccessList (Either f a) -> [a])
-> SuccessList (Either f a)
-> SuccessList a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Either f a -> [a] -> [a]) -> [a] -> [Either f a] -> [a]
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr Either f a -> [a] -> [a]
forall a a. Either a a -> [a] -> [a]
unTagRight [] ([Either f a] -> [a])
-> (SuccessList (Either f a) -> [Either f a])
-> SuccessList (Either f a)
-> [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SuccessList (Either f a) -> [Either f a]
forall a. SuccessList a -> [a]
collectNonFailing
where unTagRight :: Either a a -> [a] -> [a]
unTagRight (Right a
x) = (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:)
unTagRight Either a a
_ = [a] -> [a]
forall a. a -> a
id