在以下代码中,我必须使用elem'
而不是elem
,因为prelude已经有一个函数elem
,在声明Tree模块时如何使用elem
,避免冲突??
module Tree(Tree(..), singleton, insert, elem') where
data Tree a = Empty | Node a (Tree a) (Tree a) deriving (Show)
singleton :: a -> Tree a
singleton a = Node a Empty Empty
insert :: (Ord a) => a -> Tree a -> Tree a
insert e Empty = singleton e
insert e tree@(Node e2 left right)
| e == e2 = tree
| e > e2 = Node e2 left (insert e right)
| e < e2 = Node e2 (insert e left) right
elem' :: (Ord a) => a -> Tree a -> Bool
e `elem'` Empty = False
e `elem'` (Node e2 left right)
| e == e2 = True
| e > e2 = e `elem'` right
| e < e2 = e `elem'` left
答案 0 :(得分:3)
默认情况下,Prelude
模块在范围内,但可以覆盖此模块。 不明确导入Prelude
的任何模块在开始时都有隐式import Prelude
;但是,如果您显式导入Prelude,则不会添加。因此,您可以使用Prelude
elem
除hiding
以外的import Prelude hiding (elem)
module Tree(Tree(..), singleton, insert, elem) where
import Prelude hiding (elem)
data Tree a = Empty | Node a (Tree a) (Tree a) deriving (Show)
-- ...
elem :: (Ord a) => a -> Tree a -> Bool
e `elem` Empty = False
e `elem` (Node e2 left right)
| e == e2 = True
| e > e2 = e `elem` right
| e < e2 = e `elem` left
在代码的上下文中,这是
Prelude.elem
如果您仍然需要参考import qualified Prelude
,您也可以随时添加额外的Prelude
行。
有关模块导入的更多信息,请参阅the Haskell Wiki's nice summary of import
,包括有关如何导入模块的各种选项以及有关(隐藏)隐式Prelude
导入的一些选项。
(当然,虽然您通常不太需要它,但模块的最终仲裁者是the Haskell 2010 report, Ch. 5; §5.3是导入语法,§5.5是名称冲突,并且 public class LoginActivity extends Activity {
Button btnLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
............
}
//inner class
class OnClickListenerLogin implements OnClickListener {
.........
}
}//Login class ends
位于.distinct
(包括§5.6,“影影前奏名称”)。