Во-первых, должен ли f иметь другой тип возвращаемого значения с аргументом?
Да, так и должно быть.Пожалуйста, представьте: применяя map
к списку, мы хотим превратить каждый элемент в список.
Вот приложение: expand [1,2,3] 3
====> [[1, 1, 1], [2, 2, 2], [3, 3, 3]]
.В этом случае a
это int
, а b
это int list
, понимаете?Они разного типа.
Более подробное объяснение этого случая можно найти в этом QA
Так что я думаю, что это должно быть ('a ->' b) * 'b list ->
Это не правда.('a -> 'b) * 'b list -> ????
Скажите, пожалуйста, какой у вас последний тип параметра.Независимо от того, какой последний тип, он всегда должен быть ('a -> 'b) * 'a list ...
вместо ('a -> 'b) * 'b list ...
- тип
f
: 'a -> 'b
- Предположим, чтотип
xs
: 'x list
- Затем тип
x
: 'x
Обратите внимание на это выражение: (f x)
, которое сообщает вам x
является аргументом f
.Таким образом, тип 'x
должен быть равен типу 'a
, а не 'b
.