导入haskell模块说“不在范围内”

时间:2015-06-14 16:44:51

标签: class haskell instance

我在名为Tree2.hs的文件中创建了一个Tree结构

module Tree2
(
 Tree
) where

data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving (Show)

然后我导入它并尝试将其用作类的实例

import qualified Tree2

class YesNo a where
  yesno :: a -> Bool

instance YesNo (Tree2.Tree a) where
  yesno EmptyTree = False
  yesno _ = True

但是当我在ghci中加载它时会出现此错误:

Not in scope: data constructor ‘EmptyTree’
Failed, modules loaded: Tree2.

任何人都知道为什么?

1 个答案:

答案 0 :(得分:11)

首先,

module Tree2
(
 Tree
) where

只导出Tree数据类型,而不是其构造函数;你应该使用

module Tree2
(
  Tree(..)
) where

代替。

其次,当您进行合格导入时,您需要使用Tree2.EmptyTree而不是EmptyTree