В общем, Haskell не позволяет вам произвольно перегружать одно и то же имя функции несколькими различными реализациями. Существуют языки программирования, которые позволяют вам это делать; Хаскелл не один из них.
В общем случае, если вы хотите, чтобы одна и та же функция выполняла что-то другое для разных типов аргументов (или другого типа возврата, если на то пошло), вы используете классы типов. Однако даже это не позволяет вам просто произвольно иметь разные числа или типы аргументов; там должен быть образец.
Я понимаю, что это только для экспериментов, но я второй комментарий dfeuer: что такое boomBangs
Предполагается, что означает? Какие типы аргументов он делает имеют смысл? Ну, очевидно, в этом случае boomBangs
является тривиальной примерной функцией и на самом деле не имеет большого смысла ни для чего, кроме как для примерной функции. (Я не уверен, если вы даже попали в класс тип части урока еще.)
Обратите внимание, что, как написано, boomBangs
является уже полиморфный: Это будет работать для любого типа целого числа , Он работает для подписанных 8-битных целых чисел, неподписанных 8-битовых целых чисел, 16-разрядных 16-битных целых чисел, неподписанных 16-битных целых чисел, целых чисел произвольной точности ... Таким образом, он работает для совсем немного вещей.
Обеспечение его работы для списков и не-списков не очень естественное обобщение этой функции. (В конце концов, это стрела s.) может имеет смысл обобщить его для работы для других складных объектов (например, список, Maybe
, Either e
). Это может также иметь смысл для работы на любой монаде (например, похоже, что небольшая настройка этого может работать для вычислений с учетом состояния или парсеров или действий ввода-вывода). Но опять же, я не знаю, было ли еще какое-либо из этих понятий введено в учебнике.
Короткий ответ: нет. Haskell нуждается в вас, чтобы определить тип скважины для каждого входа, но есть способы обойти. – AJFarmar
есть способ (создание экземпляра 'Num' для списка - так, чтобы буквальный' 7' был переведен в '[7]'), - но я бы не рекомендовал его – Carsten
Есть разные причудливые трюки типа я бы не стал рекомендовать. – dfeuer