+instance ArrowChoice a => GArrow a Either Void where
+ ga_first = left
+ ga_second = right
+ ga_uncancell = arr Right
+ ga_uncancelr = arr Left
+ ga_cancell = arr unVoidLeft
+ where
+ unVoidLeft (Left v) = voidImpossible v
+ unVoidRight (Right x) = x
+ ga_cancelr = arr unVoidRight
+ where
+ unVoidRight (Left x) = x
+ unVoidRight (Right v) = voidImpossible v
+ ga_assoc = arr eitherAssoc
+ where
+ eitherAssoc (Left (Left x)) = Left x
+ eitherAssoc (Left (Right y)) = Right (Left y)
+ eitherAssoc (Right z ) = Right (Right z)
+ ga_unassoc = arr eitherUnAssoc
+ where
+ eitherUnAssoc (Left x ) = Left (Left x)
+ eitherUnAssoc (Right (Left y)) = Left (Right y)
+ eitherUnAssoc (Right (Right z)) = Right z