重命名当前模块

时间:2010-07-31 12:32:09

标签: haskell module

是否可以重命名当前模块? 假设我想引入数据构造函数Left和Right,但这些会与Prelude.Left和Right冲突。我不想在任何地方写MyModule.Left和MyModule.Right,我宁愿以某种方式将它重命名为MyModule作为M并写入M.Left。可能吗 ?有哪些替代方案?

3 个答案:

答案 0 :(得分:4)

Dario的回答提供了最简单的方法,但是既然你也要求提供替代方案,你可能需要在Haskell报告中查看the description of import declarations,或者在了解你的Haskell the "Loading modules" section

本地别名的一种常见替代方法(即import qualified SomeModule as X)只是隐藏Prelude函数(或构造函数),如果您知道不需要它们:

import Prelude hiding (Left, Right)
import MyModule

您还可以通过不同的方式导入模块的不同部分:一个常见的技巧是直接导入模块的类型,但为其功能添加别名:

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

import Data.Set (Set)
import qualified Data.Set as S

simpleMap :: Map String Int
simpleMap = M.singleton "one" 1

simpleSet :: Set String
simpleSet = S.singleton "one"

这允许我们同时使用singleton个函数,但我们也不必在每个类型签名中键入M.MapS.Set

答案 1 :(得分:1)

import qualified YourModule as M

答案 2 :(得分:0)

你只有一个模块。在这种情况下,这是从Prelude隐藏数据构造函数(Left,Right)的最简单的解决方案(这些是在那里定义的):

module MyModule where

import Prelude hiding (Left,Right)

另外,您只需导入Prelude合格。然后你必须在任何Prelude函数/ stuff / etc之前粘贴一些字母:

module MyModule where

import qualified Prelude as P