[Haskell] кириллица

 
0
 
Functional languages
ava
Artemios | 18.01.2007, 01:05
Haskell и кириллица -- есть ли возможность как-нибудь подружить, кроме как таким способом:

map chr [1042, 1099, 1088, 1077, 1079, 1072, 1090, 1100]

Когда пытаюсь просто в кавычках записать строку с кириллицей -- компилятор (ghc) ругается на лексическую ошибку.
Comments (8)
ava
DrDred | 18.01.2007, 10:35 #
Счас проверил ghc 6.4.2 - если файл сохранен в UTF-8 то все нормально... правда т.к. консоль не юникодная, то пользы от этого маловато smile
ava
Artemios | 18.01.2007, 13:33 #
Странно... Вся система utf-8, включая и консоль.
SuSE Linux 10.1
ghc-6.4.2
Что получается:
Цитата


~> cat > test1.hs



main = print "Tralala"




~> ghc --make ./test1.hs -o test1



Chasing modules from: ./test1.hs

Compiling Main    ( ./test1.hs, ./test1.o )

Linking ...



~> ./test1



"Tralala"



~> cat > test2.hs



main = print "Траляля"




~> ghc --make ./test2.hs -o test2



Chasing modules from: ./test2.hs

Compiling Main    ( ./test2.hs, ./test2.o )



./test2.hs:1:18: lexical error in string/character literal



~>    



added later:
P.S. пакет с ghc качал с PACKMAN-а, может у них он собран без поддержки юникода?
ava
DrDred | 18.01.2007, 14:22 #
а cat точно создает utf-8 файл? Про Linux сказать ничего не могу, т.к. тестировал под Виндой...
ava
Artemios | 18.01.2007, 15:00 #
Цитата (DrDred @  18.1.2007,  14:22 findReferencedText)
а cat точно создает utf-8 файл?

угу. Он писал в файл то, что я вводил с консоли, а в консоли utf. На всякий случай проверил -- действительно utf.

Цитата (Artemios @  18.1.2007,  13:33 findReferencedText)
P.S. пакет с ghc качал с PACKMAN-а, может у них он собран без поддержки юникода? 

попробовал бинарники от разработчиков с офф. сайта -- та же беда.
Приду домой, в Винду попробую загрузиться, там еще посмотрю... Хотя, для cp1251 там проверял -- также не хотело...
Но не может же быть такого, чтоб под виндой была поддержка, а под *nix -- нет?

DrDred, а у тебя откуда дистрибутив?
ava
DrDred | 18.01.2007, 15:36 #
Черт, извиняюсь похоже прогнал с utf-8 :( не ту версию файла скопмилировал....
А вот с cp1251 все хорошо... Брал дистрибутив с haskell.org, вроде ничего не докручивал...
ava
Artemios | 18.01.2007, 16:59 #
Опа...
Я похоже тоже прогнал:
Цитата (Artemios @  18.1.2007,  15:00 findReferencedText)
Хотя, для cp1251 там проверял -- также не хотело...

и наверно тот же utf-8 в Винде компилировал...

Сейчас под Linux-ом попробовал koi8-r -- все замечательно собирается и запускается smile
Цитата


~> recode utf8..koi8r < ./test2.hs > ./test3.hs



~> ghc --make ./test3.hs -o ./test3



Chasing modules from: ./test3.hs

Compiling Main    ( ./test3.hs, ./test3.o )

Linking ...



~> ./test3



"\244\210\193\204\209\204\209"



~>    


Значит, вопрос не в кириллице, а в поддержке юникода.
ava
Artemios | 23.01.2007, 16:14 #
Вообще, вопрос темы возник по следующему поводу:
начал баловаться с построение ГУИ с использованием библиотеки gtk2hs
Тут выяснилось, что строки с не-ascii символами GTK кушает в юникоде.

Решил: если гора не идет к Магомеду -- Магомед идет к горе. Написал скриптик (если кому нужен -- присоединяю к сообщению), который разбирает программу на Haskell и заменяет строки, содержащие не-ascii символы, на представление вида (map chr [список hex-значений символов в юникоде]). Теперь могу писать в любой кодировке и использовать любые строки, а после обработки скриптом все замечательно компилируется и работает хоть в Линуксе, хоть в Винде.
Скрипт писал на Python -- соответственно понимает все кодировки, что понимает питон (а это если и не все, то большинство ныне используемых кодировок). В большинстве дистрибутивов линукса питон установлен по умолчанию, под виндусом пробовал с установленным питоном, но при желании можно собрать и независимый от питона экзешник.

Ниже привожу пример использования (скрипт назвал notascii2haskell smile ), за свой хилый английский извиняюсь.
Цитата


~> ./notascii2haskell --help



notascii2haskell - converts Haskell programs with strings in various not-ascii character sets
    to programs with 'gtk2hs'-understandable replacements for strings





Usage:  notascii2haskell [ENCODING] [INFILE [OUTFILE]]
       ENCODING - encoding of input characters, on default encoding of current locale used
       INFILE - input file name, on default stdin stream used
       OUTFILE - output file name, on default stdout stream used


    notascii2haskell --help   show help message
    notascii2haskell --all-enc   show all supported encodings (with aliases)





~> cat > ./RButton.hs

module Main (main) where



import Graphics.UI.Gtk

import Data.Char



main :: IO ()

main = do
   initGUI
   window <- windowNew
   button <- buttonNewWithLabel "Кириллическая кнопка"
   set window [ containerChild := button ]
   button `onClicked` mainQuit
   window `onDestroy` mainQuit
   widgetShowAll window
   mainGUI




~> ./notascii2haskell ./RButton.hs

module Main (main) where



import Graphics.UI.Gtk

import Data.Char



main :: IO ()

main = do
   initGUI
   window <- windowNew
   button <- buttonNewWithLabel (map chr [0x41a,0x438,0x440,0x438,0x43b,0x43b,0x438,0x447,0x435,0x441,0x43a,0x430,0x44f,0x20,0x43a,0x43d,0x43e,0x43f,0x43a,0x430])
   set window [ containerChild := button ]
   button `onClicked` mainQuit
   window `onDestroy` mainQuit
   widgetShowAll window
   mainGUI



~> ./notascii2haskell ./RButton.hs ./RB.hs

~> ghc --make ./RB.hs -o ./RB

Chasing modules from: ./RB.hs

Compiling Main    ( ./RB.hs, ./RB.o )

Linking ...

~> ./RB


и после выполнения последней строчки имею окошко с кнопкой:
user posted image

Предложения по дополнению/улучшению принимаются smile
ava
Laughedelic | 11.10.2007, 20:49 #
у меня такая же проблема с кириллицей в Хаскелле.
кроме этого скрипта никто не придумал, других решений?
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit