Чтобы напечатать значение некоторого типа в Haskell, тип должен быть экземпляром класса Show.
localeEncoding :: TextEncoding
и TextEncoding не является экземпляром Show.
Тип TextEncoding на самом деле является экзистенциальным типом, хранящим методы кодирования и декодирования:
data TextEncoding
= forall dstate estate . TextEncoding {
mkTextDecoder :: IO (TextDecoder dstate),
mkTextEncoder :: IO (TextEncoder estate)
}
Поскольку это функции, разумного способа их показать нет. Текущее localeEncoding определяется с помощью iconv, через функцию C nl_langinfo.
Таким образом, TextEncoding как таковой не является отображаемым типом, поэтому его нельзя распечатать. Однако вы можете создать новые значения этого типа через mkTextEncoding. Например. создать среду utf8:
mkTextEncoding "UTF-8"
Мы могли бы рассмотреть запрос функции для сохранения представления локали с помощью TextEncoding, чтобы эта метка могла быть напечатана. Однако в настоящее время это невозможно.