Как настроить язык программирования Haskell чтобы использовать не латинские имена переменных и функций — различия между версиями
Админ (обсуждение | вклад) м |
(→Haskell не выводит символы UNICOD в функциях print и show) |
||
(не показаны 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 #-} | {-# LANGUAGE UnicodeSyntax #-} | ||
main :: IO () | main :: IO () | ||
main = putStrLn "Hello, Мир!" | 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) | ||
== Ссылки == | == Ссылки == |
Текущая версия на 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
- 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://www.onlinegdb.com/online_haskell_compiler - Онлайн компилятор Хаскель