parts :: Parser [Part]
parts =
  many (chunk <|> placeholder)
  where
    chunk = 
      fmap Chunk $ fmap mconcat $ many1 $ stringLit <|> (BB.char8 <$> notChar '?')
    placeholder = 
      char '?' *> pure Placeholder
parts :: Parser [Part]
parts =
  many (chunk <|> placeholder)
  where
    chunk = 
      fmap Chunk $ fmap mconcat $ many1 $ stringLit <|> (BB.char8 <$> notChar '?')
    placeholder = 
      char '?' *> pure Placeholder
parts =
  many (chunk <|> placeholder)
  where
    chunk = 
      fmap Chunk $ fmap mconcat $ many1 $ stringLit <|> (BB.char8 <$> notChar '?')
    placeholder = 
      char '?' *> pure Placeholder