For the Char data-type, how do I specify that I want to use the Turkish i instead of the English i for the toLower and toUpper functions?
The Data.Char library in Haskell is not locale dependent. It works for all Unicode characters, but perhaps not in the way you would expect. In the corresponding Unicode chart you can see the mappings for "dotted"/"dotless" i's.
toUpper 'i' => 'I'toUpper 'ı' => 'I'toLower 'I' => 'i'toLower 'İ' => 'i'Thus, it is clear that neither of the two transforms are reversible. If you want reversible handling of Turkish characters, it seems you have to use either a C-library or roll your own.
UPDATE: The Haskell 98 report makes this quite clear, whereas the Haskell 2010 report only says that Char corresponds to a Unicode character, and does not as clearly define the semantics of toLower and toUpper.