Haskell, Char, Unicode и Turkish

Для типа данных Char как мне указать, что я хочу использовать турецкий i вместо английского я для функций toLower и toUpper?

26
задан Don Stewart 15 May 2011 в 22:40
поделиться

3 ответа

Библиотека Data.Char в Haskell не зависит от локали. Он работает для всех символов Unicode, но, возможно, не так, как вы ожидаете. В соответствующей диаграмме Unicode вы можете увидеть сопоставления для «точечных» / «без точек» i.

  • toUpper 'i' => 'I'
  • toUpper 'ı' => 'I'
  • toLower 'I' => 'i'
  • toLower 'İ' => 'i'

Таким образом, ясно, что ни одно из двух преобразований не является обратимым. Если вам нужна обратимая обработка турецких символов, кажется, вам нужно использовать либо C-библиотеку, либо собственную.

ОБНОВЛЕНИЕ: Отчет Haskell 98 проясняет это, тогда как в отчете Haskell 2010 говорится только, что Char соответствует символу Unicode, и не так четко определяет семантику toLower и toUpper .

15
ответ дан 28 November 2019 в 07:28
поделиться

Простой вопрос программирования:

import qualified Data.Char as Char

toLower 'I' = 'ı'
toLower x   = Char.toLower x

Тогда

toLower <$> "I AM LOWERCASE" == "ı am lowercase"  
7
ответ дан 28 November 2019 в 07:28
поделиться

может попробовать установить локаль? не уверен

0
ответ дан 28 November 2019 в 07:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: