Наложение псевдонимов в F #?

У меня проблема с конфликтом имен при открытии некоторых .Net-сборок в моем F # -кодеке с помощью

open System.IO

Единственная опция, которую я нашел и использую сейчас, - предоставить полные имена типов для конфликтующих типов, но это немного скучно.

Есть ли возможность определить псевдоним для .Net пространства имен в F #, чтобы предотвратить конфликт имен?

Ответы

Ответ 1

F # не поддерживает псевдонимы пространств имен - только модули и типы. Итак, чтобы разрешить конфликты между сборками .NET, вам, к несчастью, нужно будет определить псевдонимы для всех типов, которые вы используете.

Это может быть несколько проще благодаря тому, что псевдонимы типа F # рассматриваются как объявления обычного типа (компилятором F #, а не временем выполнения). Это означает, что в отличие от ключевого слова С# using вы можете определить их в файле spearate:

// Aliases.fs
namespace SysIO

// Open the 'System' namespace to get a bit shorter syntax
// ('type File = File' is interpreted as discriminated union)
open System

type File = IO.File
type Directory = IO.Directory

В остальной части приложения вы можете использовать SysIO.File. Вам все равно придется писать псевдонимы, но по крайней мере вам не нужно делать это в каждом файле...