2011-11-06 46 views
5

在一个文件,我需要使用常规的前奏(++)运算符,我也想实现自己的行为(++)。我在我的文件的顶部使用import Prelude hiding (++),定义我自己的(++)运算符,现在下面将进一步谨提及到正规的前奏(++)。我如何实现这一目标?Haskell前奏藏匿,UNDO?

回答

14

import qualified Prelude 
除了

import Prelude hiding ((++)) 

在代码的开头,并在您的前奏需要++Prelude.++

4

由于伊藤刚解释,你可以通过它的模块名限定操作。然而,由于定义自己的(++)版本,你最有可能想增加你的程序的可读性,这有资格的运营商,它的模块名称稍后似乎是一个奇怪的措施。

看看这个:"abc" Prelude.++ "def" 现在这就是丑。

为什么不能简单地创建一个新的运营商,像<++>或类似`append`中缀函数?

+3

呀,其实我对这个问题的第一反应是“不要对你的功能'(++)',”虽然我没有张贴。但是,如果提交者正在用自己的'++'编写一个库,用它来代替Prelude中的'++',那么库的用户理想情况下不需要使用'Prelude。++'。在这种(罕见的)情况下,定义一个具有相同名称的函数是有意义的。否则,引起名称与如此盛行的事物相冲突是没有意义的。 –

+1

当人们通过“不这样做”的问题来回答问题和回答时,尤其是当问题没有提供关于其动机的足够信息时,它开始激怒我。让探险者探索,让他们尝试他们认为正确的事情,让他们亲眼看到他们做得多么丑陋。不久,他们将能够在*他们的答案上写下这个评论。 :-) – luqui