我可以有选择地打开一个模块,这样我可以不经过限定地参考它的一些值吗?

时间:2010-07-01 09:27:00

标签: f# module

在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 个答案:

答案 0 :(得分: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

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