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

Материал из ТХАБ.РФ
Перейти к: навигация, поиск
(Haskell не выводит символы UNICOD в функциях print и show)
 
Строка 38: Строка 38:
  
 
* https://qna.habr.com/q/466581
 
* https://qna.habr.com/q/466581
 +
 +
=== Совет со стакОвер Флоу ===
 +
 +
Актуально для Ghci 7.6.1 +
 +
 +
* https://stackoverflow.com/questions/5535512/how-to-hack-ghci-or-hugs-so-that-it-prints-unicode-chars-unescaped
  
 
=== Пакет Хаскель unicode-show ===  
 
=== Пакет Хаскель unicode-show ===  
  
 
+
* вместо print добавляется функция uprint 
  
 
* https://hackage.haskell.org/package/unicode-show
 
* https://hackage.haskell.org/package/unicode-show
  
 +
* https://github.com/haskell-jp/unicode-show на гитхабе
  
 
== Программа привет мир на Хаскель ==
 
== Программа привет мир на Хаскель ==

Текущая версия на 18:42, 5 ноября 2023

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)

Ссылки