Thanks so much for posting this! You inspired me to figure out how to do the same thing with emacs. The below elisp code defines a mode for Haskell chunks embedded in LaTeX files, delimited by \begin{code} ... \end{code} or \begin{diagram} ... \end{diagram}.
(require 'polymode) % install from MELPA
(define-innermode poly-haskell-latex-innermode
:mode 'haskell-mode
:head-matcher "\\\\begin{\\(diagram\\|code\\)}"
:tail-matcher "\\\\end{\\(diagram\\|code\\)}"
:head-mode 'host
:tail-mode 'host)
(define-polymode poly-latex-haskell-mode
:hostmode 'pm-host/latex
:innermodes '(poly-haskell-latex-innermode))
(add-to-list 'auto-mode-alist '("\\.tex\\'" . poly-latex-haskell-mode))