module TheatreDev.ExtrasFor.List where import TheatreDev.Prelude splitWhileJust :: [Maybe a] -> ([a], [Maybe a]) splitWhileJust :: forall a. [Maybe a] -> ([a], [Maybe a]) splitWhileJust = forall {a}. [a] -> [Maybe a] -> ([a], [Maybe a]) go [] where go :: [a] -> [Maybe a] -> ([a], [Maybe a]) go ![a] acc = \case Maybe a head : [Maybe a] tail -> case Maybe a head of Maybe a Nothing -> (forall a. [a] -> [a] reverse [a] acc, Maybe a head forall a. a -> [a] -> [a] : [Maybe a] tail) Just a liveHead -> [a] -> [Maybe a] -> ([a], [Maybe a]) go (a liveHead forall a. a -> [a] -> [a] : [a] acc) [Maybe a] tail [] -> (forall a. [a] -> [a] reverse [a] acc, [])