Для типа данных Char как мне указать, что я хочу использовать турецкий i вместо английского я для функций toLower и toUpper?
Библиотека 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
.
Простой вопрос программирования:
import qualified Data.Char as Char
toLower 'I' = 'ı'
toLower x = Char.toLower x
Тогда
toLower <$> "I AM LOWERCASE" == "ı am lowercase"