Вы можете указать в своей подписи типа, что тип должен быть экземпляром Show
.
displayList :: Show a => [a] -> IO ()
Хотя ваша рекурсия выглядит немного не так. Я бы начал с этого скелета:
displayList [] = _base
displayList (x : xs) = _rec
Вам не нужны никакие охранники, и вам не нужно использовать null
.
Примечание: для отображения списков определенными способами требуются два базовых случая:
displayList [] = _base0
displayList [x] = _base1
displayList (x : xs) = _rec
Исходя из вашего кода, я не думаю, что вам это нужно здесь, но так как вы не не показывать пример того, что вы хотите, трудно сказать наверняка.