2016-03-27 2 views
-3

Имейте параметрически полиморфную функцию foo :: a -> a -> a. Дайте четыре аргумента, чтобы получившееся выражение foo arg1 arg2 arg3 arg4 имело бы тип Bool.Полиморфные функции в Haskell

-- foo :: a -> a -> a function is defined in a code 
arg1 = undefined 
arg2 = undefined 
arg3 = undefined 
arg4 = undefined 
+1

Что вы пробовали? – chi

+0

arg1, arg2, arg3, arg4 :: a -> a -> Bool – azorge

+1

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что это домашняя работа. Это не вопрос программирования. – mb14

ответ

3

Вот подсказка, только.

Функция foo принимает два аргумента, так как его тип a -> a -> a. Однако foo arg1 arg2 arg3 arg4 передает четыре аргумента. Как это может работать?

Ну, мы можем интерпретировать foo arg1 arg2 arg3 arg4, как

let bar = foo arg1 arg2 
in bar arg3 arg4 

Это может работать только тогда, когда результат foo arg1 arg2 является функцией (bar) ожидает два аргумента. Но мы знаем, что тип bar должен быть a от типа foo. Следовательно, переменная типа a должна быть выбрана как тип двоичной функции, то есть что-то вроде b -> c -> d.

Подводя итог, если foo :: a -> a -> a, то мы также имеем

foo :: (b -> c -> d) -> (b -> c -> d) -> (b -> c -> d) 
Смежные вопросы