在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
答案 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中),所以这可能是最好的选择。