expr_ =
  (ELit <$> int_)
  <|> (ENamed <$> symbol_)
  <|> (pure EHole <* hole_)
  <|> (EVar <$> identifier)
  <|> (EString <$> stringLiteral)
  <|> (wrap_ $ flip EBinOp <$> expr_ <*> binOp_ <*> expr_)
  <|> (wrap_ $ EConcat <$> expr_ <*> (string "++" *> expr_))
expr_ =
  (ELit <$> int_)
  <|> (ENamed <$> symbol_)
  <|> (pure EHole <* hole_)
  <|> (EVar <$> identifier)
  <|> (EString <$> stringLiteral)
  <|> (wrap_ $ flip EBinOp <$> expr_ <*> binOp_ <*> expr_)
  <|> (wrap_ $ EConcat <$> expr_ <*> (string "++" *> expr_))
expr_ =
  (ELit <$> int_)
  <|> (ENamed <$> symbol_)
  <|> (pure EHole <* hole_)
  <|> (EVar <$> identifier)
  <|> (EString <$> stringLiteral)
  <|> (wrap_ $ flip EBinOp <$> expr_ <*> binOp_ <*> expr_)
  <|> (wrap_ $ EConcat <$> expr_ <*> (string "++" *> expr_))