tailsAndInits as = recurse as [] where
  recurse :: [a] -> [a] -> [([a], [a])]
  recurse [] ts = [] -- [([], ts)]
  recurse is'@(i:is) ts = (is', ts) : recurse is (i:ts)
tailsAndInits as = recurse as [] where
  recurse :: [a] -> [a] -> [([a], [a])]
  recurse [] ts = [] -- [([], ts)]
  recurse is'@(i:is) ts = (is', ts) : recurse is (i:ts)
tailsAndInits as = recurse as [] where
  recurse :: [a] -> [a] -> [([a], [a])]
  recurse [] ts = [] -- [([], ts)]
  recurse is'@(i:is) ts = (is', ts) : recurse is (i:ts)