joinExprs :: [ExpQ] -> ExpQ -> ExpQ
joinExprs leaves joiner = do
  j <- joiner
  (x:xs) <- sequence leaves
  return $ foldl (\p a -> InfixE (Just p) j (Just a)) x xs

-- | data X = A | B | C is just a simple enum, so it gets treated as strings
joinExprs :: [ExpQ] -> ExpQ -> ExpQ
joinExprs leaves joiner = do
  j <- joiner
  (x:xs) <- sequence leaves
  return $ foldl (\p a -> InfixE (Just p) j (Just a)) x xs

-- | data X = A | B | C is just a simple enum, so it gets treated as strings
joinExprs leaves joiner = do
  j <- joiner
  (x:xs) <- sequence leaves
  return $ foldl (\p a -> InfixE (Just p) j (Just a)) x xs

-- | data X = A | B | C is just a simple enum, so it gets treated as strings