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