Импортирующий модуль haskell говорит "не в области видимости"

Я создал древовидную структуру в файле с именем Tree2.hs

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 ответ

Решение

Первый,

module Tree2
(
 Tree
) where

только экспортирует Tree тип данных, а не его конструкторы; ты должен использовать

module Tree2
(
  Tree(..)
) where

вместо.

Во-вторых, когда вы делаете качественный импорт, вам нужно использовать Tree2.EmptyTree вместо просто EmptyTree,

Другие вопросы по тегам