Подтвердить что ты не робот

Ошибка Haskell Не в области: конструктор данных

Я написал несколько простых модулей в Haskell, а затем import в другом файле. Затем я пытаюсь использовать функции с конструкторами данных из моего модуля - есть ошибка Not in scope: data constructor: <value>. Как я могу это исправить?

Примечание: когда я использую его в интерпретаторе после импорта - все хорошо без ошибок.

Мой модуль Test.hs:

module Test (test_f) where
data Test_Data = T|U|F deriving (Show, Eq)

test_f x
    | x == T = T
    | otherwise = F

И мой файл file.hs:

import Test

some_func = test_f

Нет ошибки, если я пишу в интерпретаторе:

> :l Test
> test_f T
T

В интерпретаторе я пытаюсь выполнить some_func T, но есть ошибка. И как я могу использовать класс Test_Data в моем файле для описания аннотаций?

4b9b3361

Ответ 1

Вы не экспортируете его из своего модуля:

module Test (test_f, Test_Data(..)) where

В разделе (..) говорится: "экспортируйте все конструкторы для TestData".

Ответ 2

У вас есть явный список экспорта в вашем модуле Test:

module Test (test_f) where

В списке экспорта (test_f) указано, что вы хотите экспортировать функцию test_f и ничего больше. В частности, тип данных Test_Data и его конструкторы скрыты.

Чтобы исправить это, удалите список экспорта следующим образом:

module Test where

Теперь все будет экспортировано.

Или добавьте тип данных и его конструкторы в список экспорта следующим образом:

module Test (test_f, Test_Data(..)) where

Обозначение Test_Data(..) экспортирует тип данных со всеми соответствующими конструкторами.