Вывод кириллицы в GHCi

Для того, чтобы в консоли GHCi нормально отображалась кириллица, можно сделать следующее (при условии, что установлена Haskell Platform):

  1. Установить пакет wl-pprint:

    cabal install wl-pprint
  2. Создать в домашнем каталоге файл .ghci (расположение) со следующим содержимым:

    import System.IO 
    import Text.PrettyPrint.Leijen
    let upprint a = (hPutDoc stdout . pretty) a >> putStrLn ""
    :set -interactive-print=upprint
  3. Если не нравится получающееся в результате длинное приглашение к вводу (с именами загруженных модулей), можно дополнительно приписать к .ghci:
  4. :set prompt "ghci> "
  5. Теперь можно пользоваться интерпретатором ghci с поддержкой кириллицы:

    $ ghci
    GHCi, version 8.2.2: http://www.haskell.org/ghc/  :? for help
    Loaded GHCi configuration from /home/bravit/.ghci
    ghci> "Привет, мир"
    Привет, мир
    ghci> 

Полезно понимать причины поведения интерпретатора по умолчанию: вывод значений выражений выполняется функцией print, которая вызывает для своего аргумента функцию show. Последняя была определена более 20 лет назад и с тех пор практически не менялась, она заменяет любые не-ASCII символы на их коды. В предлагаемом решении мы фактически подменяем функцию print в ghci, что позволяет видеть кириллицу, а заодно и любые юникодные символы (разумеется, при наличии шрифтов) без изменений.

Последнее изменение: Wednesday, 14 February 2018, 21:50