Skip to content

Instantly share code, notes, and snippets.

@alogic0
Last active August 11, 2018 10:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alogic0/5dbc6c45b5af58d831e6418071f5b00f to your computer and use it in GitHub Desktop.
Save alogic0/5dbc6c45b5af58d831e6418071f5b00f to your computer and use it in GitHub Desktop.
Вывод кириллицы в GHCi

source: http://edu.mmcs.sfedu.ru/mod/page/view.php?id=16778
author: Vitaly Bragilevsky

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

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

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

cabal install wl-pprint

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

import System.IO 
import Text.PrettyPrint.Leijen
upprint a = (hPutDoc stdout . pretty) a >> putStrLn ""
:set -interactive-print=upprint

Если не нравится получающееся в результате длинное приглашение к вводу (с именами загруженных модулей), можно дополнительно приписать к .ghci: :set prompt "ghci> " Теперь можно пользоваться интерпретатором 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, что позволяет видеть кириллицу, а заодно и любые юникодные символы (разумеется, при наличии шрифтов) без изменений.

@alogic0
Copy link
Author

alogic0 commented Aug 11, 2018

Another setting of prompt:

:set prompt "%w %call(D:/shonfinkel/msys64/usr/bin/date +%H:%M:%S)%s\n> "

or just:

:set prompt "%s\n> "

to see all imports.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment