Я борюсь с нотацией подписи типа F #.Например, допустим, у вас есть функция Fold:
let rec Fold combine acc l =
...
, которая может иметь подпись этого типа:
('a -> 'b -> 'a) -> 'a -> list<'b> -> 'a
, которую я бы прочитал как
aфункция, которая имеет три аргумента:
- функция, которая принимает 'a, a' b и возвращает a '
- an'a
- список' b
и возвращает 'a.
Нотогда для моего мозга пещерных людей было бы более разумно выразить это как
('a, 'b -> 'a), 'a, list<'b> -> 'a
Я уверен, что есть семантическая причина, по которой параметры разделяются стрелкой точно так же, как и возвращаемый функцией тип, нопочему-то я упускаю это и до сих пор не нашел четкого объяснения в книгах / статьях.Каждый раз, когда я вижу сигнатуру типа, мне приходится останавливаться, чтобы понять это.Я чувствую, что просто скучаю по той маленькой части головоломки, которая делает «расшифровку» очевидной.
Может кто-нибудь, пожалуйста, просветить меня?