^a or ^b
означает буквально «^a
или ^b
».
Двоеточие :
означает «имеет» или «содержится в», в зависимости от того, как вы на него смотрите.
Таким образом, все выражение (^a or ^b) : (static member op_Implicit : ^a -> ^b)
означает «статический член с именем„op_Implicit“, который имеет тип ^a -> ^b
и определяется на любом типе ^a
или тип ^b
». Все это выражение в конечном счете оценивает функцию типа ^a -> ^b
.
Затем x
, расположенный справа от этого выражения, означает «приложение-функция», как и в обычном синтаксисе F #.
Так что все это вместе взятое будет означать «по типу ^a
или типа ^b
, найти статический член с именем„op_Implicit“, который имеет тип ^a -> ^b
, и применять этот элемент в аргументе x
».
Для более подробного обсуждения статически разрешенных ограничений см. this answer или this MSDN article.
Обязательно дубликат на SO где-то - см. Документы https://msdn.microsoft.com/en-au/library/dd548046.aspx –
Документы объясняют ограничения, но не вызовы функций, которые видны здесь. – Asik