Чтобы ответить на вторую половину вашего вопроса, универсальные типы в F # могут быть указаны с использованием синтаксиса в стиле O'Caml, где универсальный параметр предшествует типу (например, 'a list
, int array
и т. Д.), Или стиль .NET с угловыми скобками (например, list<'a>
, array<int>
и т. д.), поэтому два определения действительно в основном эквивалентны (за исключением того, что написанная вами версия синтаксически неверна, поскольку lazy
является ключевым словом). Для многопараметрических универсальных типов стиль O'Caml устарел и генерирует предупреждение (например, let (m:(int,string) Map) = Map.empty
следует переписать как let (m:Map<int,string>) = Map.empty
).