Как настроить язык программирования Haskell чтобы использовать не латинские имена переменных и функций

Материал из ТХАБ.РФ
Перейти к: навигация, поиск

Haskell поддерживает использование не только латинских символов в именах переменных и функций. Для того, чтобы настроить Haskell на использование других символов, необходимо выполнить следующие шаги:

1. Установить расширение языка Haskell под названием UnicodeSyntax. Это можно сделать, добавив в начало файла следующую строку:

{-# LANGUAGE UnicodeSyntax #-}

Использовать символы Юникода вместо латинских символов в именах переменных и функций. Например, вместо x можно использовать х, а вместо f можно использовать ƒ.

Для того, чтобы использовать символы Юникода в именах переменных и функций в интерактивной среде GHCi, необходимо добавить следующую строку в файл

~/.ghci:
:set -XUnicodeSyntax

После выполнения этих шагов вы сможете использовать символы Юникода в именах переменных и функций в Haskell.

Haskell не выводит символы UNICOD в функциях print и show

Как вывести русские символы в haskell?

Есть последовательность команд.

Но выводятся символы в ascii, как их перекодировать в utf-8, чтобы русские символы отображались?

let nouns = ["бродяга", "лягушатник", "поп"]
let adjs = ["ленивый", "ворчливый", "хитрый"]
[adj ++ " " ++ noun | adj <- adjs, noun <- nouns]

Ответ:

Так и должно быть. Это unicode, print/show его экранирует. У вас юникод должен выводиться верно через putStrLn.

Попробуйте:

sequence_ $ map putStrLn [adj ++ " " ++ noun | adj <- adjs, noun <- nouns]

Если вы хотите выводить неэкранированный юникод через print/show, тогда обратите внимание на этот пакет https://hackage.haskell.org/package/unicode-show

Совет со стакОвер Флоу

Актуально для Ghci 7.6.1 +

Пакет Хаскель unicode-show

  • вместо print добавляется функция uprint

Программа привет мир на Хаскель

Тестирование вывода на русском языке в Хаскеле

{-# LANGUAGE UnicodeSyntax #-}
main :: IO ()
main = putStrLn "Hello, Мир!"

Тестирование использование имён переменных и функций на русском языке в Хаскеле

{-# LANGUAGE UnicodeSyntax #-}
анализЗолота :: Int -> String
анализЗолота проба =
  if проба == 999
    then "Отлично! Это 999 проба!"
    else if проба == 750
           then "Хорошо! 750 проба."
           else if проба == 585
                  then "Неплохо! 585 проба."
                  else "Я не знаю что это за стандарт..."
main :: IO ()
-- вводим 999 пробу
main = putStrLn (анализЗолота 999)

Ссылки