Для задания Я работаю над списком функций [Int -> Int]
(например, [(+3), (*4), (+1)]
), и я хотел бы применить к каждому из них один Int
, в свою очередь создав список результатов [Int]
Haskell применяет одно значение к списку функций
Я уже много искал, но я не могу найти способ выполнить такую операцию. Использование map
не работает так, как я ожидал. Соответствующая ошибка заключается в следующем:
ERROR - Cannot infer instance
*** Instance : Num ((Label -> Label) -> a)
В соответствии с просьбой код:
data Tree = Node (Label -> Label) Label [Tree]
type Label = Int
testTree = Node (+1) 3 [ Node (+1) 5 [], Node (+1) 4 [Node (+1) 1 [], Node (+2) 7 []]]
listify :: Tree -> [(Label -> Label)]
listify t = [(getNodeFunction t)] ++ concat(map (listify) (getSubTrees t))
*Main> map (\f -> f 7) (listify testTree)
это на самом деле работает. Если бы кусок неисправного кода в файле все еще, извините за суету.
показать нам код, который использует карту –
Это не связано с вашим вопросом, но ваш тип 'Tree' немного странный. Я не знаю, что вы пытаетесь сделать с ним точно, но, похоже, объединяет две концепции: создание дерева вещей и объединение некоторых вещей вместе. Возможно, вам стоит рассмотреть возможность использования 'Data.Tree' (из пакета' container', который поставляется с GHC), и в этот момент что-то довольно близкое к вашему типу может быть выражено как «Tree (Label -> Label, Label)». Разбивая это так, вы можете использовать всевозможные функции «Tree» общего назначения. – dfeuer
Этот тип дерева задается в задании. Предположительно, с намерением раздражать когда-либо живого ад из студентов. – nitowa