If pdflatex
is used, you need to neutralize the active catcode of characters in with the high bit set:
\documentclass{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{verbments}
\usepackage{etoolbox}
\makeatletter
\newcommand{\xpyg@neutralize}{% make characters in the range 128-255 printable
\@tempcnta=128
\loop
\catcode\@tempcnta=12
\ifnum\@tempcnta<255
\advance\@tempcnta\@ne
\repeat
}
\patchcmd{\pyglist@}
{\VerbatimEnvironment}
{\VerbatimEnvironment\begingroup\xpyg@neutralize}
{}{}
\patchcmd{\endpyglist}
{\input}
{\endgroup\input}
{}{}
\makeatother
\begin{document}
\begin{pyglist}[language=haskell]
fact n = foldl 1 (*) [1..n] -- так определяет !n профессор информатики
\end{pyglist}
\end{document}
The same patch is innocuous when XeLaTeX or LuaLaTeX is used, but for these you need a monospaced font that supports Cyrillic, for instance CM Unicode.
Here's a version that runs with all three engines.
\documentclass{article}
\usepackage{ifxetex,ifluatex}
\newif\ifunicodeengine
\ifxetex\unicodeenginetrue\else\ifluatex\unicodeenginetrue\fi\fi
\ifunicodeengine
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{CMU Serif}
\setsansfont[Ligatures=TeX]{CMU Sans Serif}
\setmonofont{CMU Typewriter Text}
\else
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\fi
\usepackage{verbments}
\usepackage{etoolbox}
\makeatletter
\newcommand{\xpyg@neutralize}{%
\@tempcnta=128
\loop
\catcode\@tempcnta=12
\ifnum\@tempcnta<255
\advance\@tempcnta\@ne
\repeat
}
\patchcmd{\pyglist@}
{\VerbatimEnvironment}
{\VerbatimEnvironment\begingroup\xpyg@neutralize}
{}{}
\patchcmd{\endpyglist}
{\input}
{\endgroup\input}
{}{}
\makeatother
\begin{document}
\begin{pyglist}[language=haskell]
fact n = foldl 1 (*) [1..n] -- так определяет !n профессор информатики
\end{pyglist}
\end{document}
