{-# OPTIONS_GHC -fno-warn-orphans #-}
module BishBosh.Data.Either(
xpickle
) where
import qualified Text.XML.HXT.Arrow.Pickle as HXT
instance (HXT.XmlPickler l, HXT.XmlPickler r) => HXT.XmlPickler (Either l r) where
xpickle :: PU (Either l r)
xpickle = PU l -> PU r -> PU (Either l r)
forall l r. PU l -> PU r -> PU (Either l r)
xpickle PU l
forall a. XmlPickler a => PU a
HXT.xpickle PU r
forall a. XmlPickler a => PU a
HXT.xpickle
xpickle :: HXT.PU l -> HXT.PU r -> HXT.PU (Either l r)
xpickle :: PU l -> PU r -> PU (Either l r)
xpickle PU l
lPickler PU r
rPickler = (Either l r -> Int) -> [PU (Either l r)] -> PU (Either l r)
forall a. (a -> Int) -> [PU a] -> PU a
HXT.xpAlt (
Int -> l -> Int
forall a b. a -> b -> a
const Int
0 (l -> Int) -> (r -> Int) -> Either l r -> Int
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
`either` Int -> r -> Int
forall a b. a -> b -> a
const Int
1
) [
(l -> Either l r, Either l r -> l) -> PU l -> PU (Either l r)
forall a b. (a -> b, b -> a) -> PU a -> PU b
HXT.xpWrap (
l -> Either l r
forall a b. a -> Either a b
Left,
\(Left l
l) -> l
l
) PU l
lPickler,
(r -> Either l r, Either l r -> r) -> PU r -> PU (Either l r)
forall a b. (a -> b, b -> a) -> PU a -> PU b
HXT.xpWrap (
r -> Either l r
forall a b. b -> Either a b
Right,
\(Right r
r) -> r
r
) PU r
rPickler
]