content: \documentclass{article}
  
  \begin{document}
  
  \section*{Introduction}
  
  Text outside code environments should follow TeX/LaTeX highlighting.
  
  The code environment delimiters themselves should be highlighted.
  
  Text inside code environments should follow regular Haskell highlighting.
  
  \begin{code}
  import           Data.List
  import           System.Environment
  import           Text.Printf
  
  twoSumN :: Int -> [Int] -> [Int]
  twoSumN _ [] = []
  twoSumN n (x : xs) | (n - x) `elem` xs = [x, n - x]
                     | otherwise         = twoSumN n xs
  
  threeSumN :: Int -> [Int] -> [Int]
  threeSumN _ [] = []
  threeSumN n (x : xs) | null partial = threeSumN n xs
                       | otherwise    = x : partial
    where partial = twoSumN (n - x) xs
  \end{code}
  
  Text in-between code environments.
  % LaTeX comment.
  
  \begin{code}
  output :: String -> IO ()
  output path = do
    input <- sort . map read . filter (not . null) . lines <$> readFile path
    printf "File: %s\n" path
    printf "  Part 1: %d\n" . product . twoSumN 2020 $ input
    printf "  Part 2: %d\n" . product . threeSumN 2020 $ input
  
  -- Haskell comment inside code environment.
  
  main :: IO ()
  main = getArgs >>= mapM_ output
  \end{code}
  
  \end{document}
  