Я хочу создать функцию apply, которая принимает функцию с произвольным количеством аргументов, а также список целых чисел и возвращает результат функции (где каждое целое число в список является аргументом для тогоПрименение функции к произвольно длинному списку аргументов
Я думал, что-то вроде:
apply :: ([Int] -> Int) -> [Int] -> Int
apply f x:xs = apply (f x) xs
apply f [] = f
Но я знаю, что это не будет работать, так как тип подписи неправильно - функция не принимает список Интс. , он просто принимает некоторое количество аргументов int.
Кроме того, когда я добираюсь до базового случая, аргумент f для применения должен фактически быть целым числом, в любом случае нарушая подпись типа.
Кто-нибудь знает, как справиться с этой проблемой?
Вам просто нужно FlexibleInstances, и вы можете обойти весь класс IsInt и написать ApplyType (Int -> r) напрямую. –