Прежде всего, у вас есть ошибка в объявлении типа данных. Из вашего вопроса вам нужен тип данных, который содержит Int
и список Int
, но вам не хватает конструктора данных 1 . Это метка, используемая при сопоставлении с образцом или при создании новых значений вашего типа данных.
data SomeThing = SomeThingConstr Int [Int]
Обычно конструктор называют так же, как и сам тип данных, когда он только один, но здесь я дал им отдельные имена, чтобы избежать путаницы.
Теперь легко написать свою функцию, используя сопоставление с образцом и этот конструктор данных.
foo :: SomeThing -> SomeThing
foo (SomeThingConstr _ xs) = SomeThingConstr (sum xs) (map (*2) xs)
1 Или, скорее, у вас есть конструктор данных с именем Int
, который явно не тот, что вы имели в виду.