Могу ли я выборочно открыть модуль, чтобы я мог ссылаться на некоторые его значения без квалификации? - PullRequest
4 голосов
/ 01 июля 2010

В Haskell я использую модуль Data.Map и его основной тип с тем же именем, Data.Map.Map, например:

import Data.Map (Map)
import qualified Data.Map as M

В F # я хочу сделать нечто подобное с моим Item модулем, который содержит тип с таким же именем:

module Item

type Item = { Description: string }
let empty = { Description = "" }

Я не могу найти способ использовать этот модуль квалифицированным, а тип неквалифицированным. Могу ли я использовать этот модуль и печатать так из другого модуля?

let getItem (): Item = Item.empty

Изменить:

Добавление псевдонима типа из клиентского модуля позволяет мне использовать модуль Item с квалификацией и тип Item без квалификации, но есть ли лучший способ?

type Item = Item.Item

1 Ответ

9 голосов
/ 01 июля 2010

Я думаю, что единственный способ импортировать из модуля только один тип - это использовать псевдоним типа (как вы уже заметили). Чтобы получить квалифицированный доступ к членам модуля (под другим именем), вы можете использовать псевдоним модуля:

type Item = Item.Item // Type-alias for type(s) from module
module I = Item       // Module-alias for accessing members

// Now you can write:
let getItem() : Item = I.empty

Я не думаю, что есть какой-либо способ выборочного импорта членов из модуля (как в Haskell), так что это, вероятно, лучший вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...