我可以有选择地打开一个模块,这样我可以毫无条件地参考它的一些值吗?

Dav*_*gel 4 f# module

在Haskell中,我使用Data.Map模块及其相同名称的主要类型Data.Map.Map,如下所示:

import Data.Map (Map)
import qualified Data.Map as M
Run Code Online (Sandbox Code Playgroud)

在F#中,我想做一些与我的Item模块类似的东西,它包含一个相同名称的类型:

module Item

type Item = { Description: string }
let empty = { Description = "" }
Run Code Online (Sandbox Code Playgroud)

我找不到使用此模块的方法合格且类型不合格.我可以使用此模块并从另一个模块中这样输入吗?

let getItem (): Item = Item.empty
Run Code Online (Sandbox Code Playgroud)

编辑:

从客户端模块添加类型别名让我可以使用Item具有资格的模块和Item没有资格的类型,但还有更好的方法吗?

type Item = Item.Item
Run Code Online (Sandbox Code Playgroud)

Tom*_*cek 9

我认为从模块中仅导入单个类型的唯一方法是使用类型别名(如您所述).要获得对模块成员的限定访问权限(使用其他名称),可以使用模块别名:

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
Run Code Online (Sandbox Code Playgroud)

我认为没有任何方法可以有选择地从模块中导入成员(如在Haskell中),所以这可能是最好的选择.