Библиотека Data.Char
в Haskell не зависит от локали. Это работает для всех символов Юникода, но, возможно, не так, как вы ожидаете. В соответствующей диаграмме Unicode вы можете видеть сопоставления для «пунктирных» / «точечных» я.
toUpper 'i'
=> 'I'
toUpper 'ı'
=> 'I'
toLower 'I'
=> 'i'
toLower 'İ'
=> 'i'
Таким образом, ясно, что ни одно из двух преобразований не является обратимым. Если вам нужна обратимая обработка турецких символов, похоже, вам нужно либо использовать C-библиотеку, либо свернуть свою собственную.
ОБНОВЛЕНИЕ: В отчете Haskell 98 об этом достаточно ясно сказано, тогда как в отчете Haskell 2010 говорится только, что Char
соответствует символу Unicode, и не так четко определяет семантику toLower
и toUpper
.