module Data.Sequence.Extra ( separate ) where import Data.Sequence (Seq, (|>), empty) separate :: (a -> Either b c) -> Seq a -> (Seq b, Seq c) separate :: (a -> Either b c) -> Seq a -> (Seq b, Seq c) separate a -> Either b c f = ((Seq b, Seq c) -> a -> (Seq b, Seq c)) -> (Seq b, Seq c) -> Seq a -> (Seq b, Seq c) forall (t :: * -> *) b a. Foldable t => (b -> a -> b) -> b -> t a -> b foldl (Seq b, Seq c) -> a -> (Seq b, Seq c) g (Seq b forall a. Seq a empty, Seq c forall a. Seq a empty) where g :: (Seq b, Seq c) -> a -> (Seq b, Seq c) g (Seq b bs, Seq c cs) a a = case a -> Either b c f a a of Left b b -> (Seq b bs Seq b -> b -> Seq b forall a. Seq a -> a -> Seq a |> b b, Seq c cs) Right c c -> (Seq b bs, Seq c cs Seq c -> c -> Seq c forall a. Seq a -> a -> Seq a |> c c)