Существует несколько решений вашей проблемы, в зависимости от вашего намерения: хотите ли вы указать в своем типе, что ваша функция может выйти из строя (и в этом случае вы хотите вернуть причину сбоя, которая может быть излишней) если есть только один режим сбоя, как здесь), или вы считаете, что получение пустого списка в этой функции вообще не должно происходить, и поэтому хотите немедленно завершиться с ошибкой и сгенерировать исключение?
Поэтому, если вы хотите явно указать возможность сбоя в вашем типе, вы можете использовать Maybe, чтобы просто указать сбой без объяснения причин (в конце концов, в вашей документации):
take :: (Eq a) => [a] -> [a] -> Maybe Bool
take [] _ = Nothing
take x y = x == y
Или либо указать причину сбоя (обратите внимание, что в любом случае ответом будет «возврат двух типов из одной функции», хотя ваш код более конкретен):
take :: (Eq a) => [a] -> [a] -> Either String Bool
take [] _ = Left "Empty list"
take x y = Right $ x == y
Наконец, вы можете сигнализировать, что этот сбой является совершенно ненормальным и не может быть обработан локально:
take :: (Eq a) => [a] -> [a] -> Bool
take [] _ = error "Empty list"
take x y = x == y
Обратите внимание, что при этом последнем способе сайт вызова не должен немедленно обрабатывать сбой, на самом деле это не может, поскольку исключения могут быть перехвачены только в монаде ввода-вывода. Первыми двумя способами сайт вызова должен быть модифицирован для обработки случая сбоя (и может), если только для себя вызов «ошибки».
Существует одно окончательное решение, которое позволяет вызывающему коду выбирать, какой режим сбоя вы хотите (используя пакет сбоя http://hackage.haskell.org/package/failure):
take :: (Failure String m, Eq a) => [a] -> [a] -> m Bool
take [] _ = failure "Empty list"
take x y = return $ x == y
Это может имитировать решение Maybe и Either, или вы можете использовать take в качестве IO Bool, который выдает исключение в случае сбоя. Он может даже работать в контексте [Bool] (в случае сбоя возвращает пустой список, что иногда полезно).