Если вы действительно хотите самый быстрый способ определения пользовательских версий этих функций, просто напишите все возможные шаблоны.Вы можете упаковать несколько предложений в строку, разделив их точкой с запятой.
Однако я не вижу, что вы получите.ord
и chr
не медленнее только потому, что они обрабатывают все кодовые точки;Char
уже хранит полную кодовую точку Unicode.Действительно, ord
должен быть в основном бесплатным, а также chr
(помимо простой проверки на валидность).Так почему бы просто не применить соответствующее числовое смещение к стандартным функциям ord
и chr
?(Обратите внимание, что даже простое написание шаблонов, как я предлагал выше, не пропустит проверку ошибок полностью; GHC сгенерирует исключение, если передано значение, которое не обрабатывается ни одним из ваших предложений.)