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

Материал из ТХАБ.РФ
Перейти к: навигация, поиск
м
(Haskell не выводит символы UNICOD в функциях print и show)
 
(не показаны 3 промежуточные версии 2 участников)
Строка 14: Строка 14:
  
 
После выполнения этих шагов вы сможете использовать символы Юникода в именах переменных и функций в Haskell.
 
После выполнения этих шагов вы сможете использовать символы Юникода в именах переменных и функций в 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
 +
 +
* 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 ===
 +
 +
* вместо print добавляется функция uprint 
 +
 +
* https://hackage.haskell.org/package/unicode-show
 +
 +
* https://github.com/haskell-jp/unicode-show на гитхабе
 +
 +
== Программа привет мир на Хаскель ==
 +
 +
=== Тестирование вывода на русском языке в Хаскеле ===
 +
 +
{-# LANGUAGE UnicodeSyntax #-}
 +
main :: IO ()
 +
main = putStrLn "Hello, Мир!"
 +
 +
=== Тестирование использование имён переменных и функций на русском языке в Хаскеле ===
 +
 +
* https://replit.com/ - проверялся в онлайн компиляторе Хаскель 9.02
 +
* https://www.ohaskell.guide/choose-n-patterns.html - пример отсюда
 +
 +
{-# 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)
  
 
== Ссылки ==
 
== Ссылки ==
 
* https://koala.sh/ нейросеть Koala
 
* https://koala.sh/ нейросеть Koala
 +
* https://www.onlinegdb.com/online_haskell_compiler - Онлайн компилятор Хаскель
  
 
[[Категория:Haskell]]
 
[[Категория:Haskell]]
 
[[Категория:Русификация языка программирования]]
 
[[Категория:Русификация языка программирования]]
 
[[Категория:Ответ сгенерирован Koala]]
 
[[Категория:Ответ сгенерирован Koala]]

Текущая версия на 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)

Ссылки