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