Я готовлюсь к экзамену, и одна из проблем на практике требует написать объявление типа
mystery :: ---complete here----
mystery x p
| p (head x) = tail x
| otherwise = head x : mystery (tail x) p
Не глядя на ответ, я подумал, что тайна будет иметь тип:
mystery:: [a] -> a -> [a]
но когда я смотрю на решение для сравнения:
mystery:: [a] -> (a -> Bool) -> [a]
Почему a -> Bool
?и что в строках кода может сказать мне рассмотреть Bool
в моем объявлении типа?