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, [])