Ваша проблема - ваш базовый случай. Здесь:
init' [x] = [x]
Вы говорите, что когда вы переходите к списку с одним элементом, вы хотите вернуть тот же список. Это не желаемый результат. Если у вас есть список с одним элементом, вы хотите вернуть пустой список (все, кроме последнего элемента для одного элемента, являются пустым списком).
init' [x] = []
Что касается примечания, вы, вероятно, должны объявить его как
init' :: [a] -> [a]
Использование «a» в качестве типа обобщает его в списки чего угодно, в отличие от просто Ints. Таким образом, вы можете вызвать init 'в любом списке. Например, init '"abcde" даст вам "abcd"