2012-05-17 7 views
-2

Может кто-то пожалуйста, дайте мне пример функции, которая будет использовать этот тип данных:Пример функции в Haskell, необходимой - функции :: Num Ь => Ь -> а -> [а]

function :: Num b => b -> a -> [a] 
function a b = ... 

Также в идеале a будет строкой.

Нет, это не домашнее задание xD Мне просто нужен пример для проекта.

Я попытался взять б (повторение а), но я получаю ошибку

Could not deduce (b ~ Int) 
from the context (Num b) 
+1

Является ли это домашнее задание? – chepner

+1

Эта подпись не имеет большого смысла для задачи, которую вы хотите выполнить. Что означает 'function 7.3" foo "' предполагается вернуться? – leftaroundabout

ответ

2

Это будет работать (это функция, которая соответствует описанию типа):

function :: Num b => b -> a -> [a] 
function arg1 arg2 = [arg2] 
+3

Или также 'function _ _ = []'. – Vitus

+0

Простой, но эффективный xD –

2

Вы можете повторить данный элемент (типа a) b раз, чтобы создать список

+0

Я попытался взять b (повторить a), но я получаю ошибку Не удалось вывести (b ~ Int) из контекста (Numb) –

+0

'take' принимает' Int', поэтому вам нужно будет явно преобразовать ' Num' to 'Int'. С другой стороны, «Num» также может быть числом с плавающей запятой, поэтому в этот момент вам нужно подумать о том, что означает повторение чего-то b раз (например, сначала округлить его). – Attila

1

Прелюдия обеспечивает количество функций (например, take, drop, !!, splitAt и т. д.), которые бесполезно мономорфны: они требуют, чтобы число, которое они указаны, было Int. Модуль Data.List экспортирует больше полиморфных версий этих функций, которые принимают аргумент любого типа в классе Integral; они имеют одно и то же имя, но имеют префикс generic. Таким образом, вместо take a (repeat b), вы можете попробовать

function a b = genericTake a (repeat b) 
+1

Функции «generic ...» принимают любой тип класса «Интеграл», который имеет гораздо больше смысла, чем «Num». – leftaroundabout

+0

@leftaroundabout Спасибо за исправление. –

Смежные вопросы