PAKCS REPL считает что-то неопределенным, но модуль, определяющий это, загружен

Эта проблема

Мой код содержит модуль Tests, который определяет следующее:

broken :: SetRBT Int
broken = insertRBT 1 $ emptySetRBT (<)

Я могу оценить broken в REPL:

All> broken
RedBlackTree.RedBlackTree (_impl#==#Prelude.Eq#Prelude.Int) (_impl#==#Prelude.Eq#Prelude.Int) (_def#<#Prelude.Ord (_inst#Prelude.Ord#Prelude.Int)) (RedBlackTree.Tree RedBlackTree.Black 1 RedBlackTree.Empty RedBlackTree.Empty)
All>

Я не могу, однако, оценить RHS brokenопределение:

All> insertRBT 1 $ emptySetRBT (<)

PAKCS_Main_Exp.curry, line 3.18: Error:
    Undefined type RedBlackTree.RedBlackTree
ERROR occurred during parsing!
All>

Или так я верил, пока не попробовал прикрепить подпись типа:

All> insertRBT 1 $ emptySetRBT (<) :: SetRBT Int
RedBlackTree.RedBlackTree (_impl#==#Prelude.Eq#Prelude.Int) (_impl#==#Prelude.Eq#Prelude.Int) (_def#<#Prelude.Ord (_inst#Prelude.Ord#Prelude.Int)) (RedBlackTree.Tree RedBlackTree.Black 1 RedBlackTree.Empty RedBlackTree.Empty)
All>

Я согласен с необходимостью прикреплять сигнатуры типов, когда это необходимо, или, в более общем смысле, делать то, что в сообщениях об ошибках предлагается делать. Но как мне узнать, что вышеприведенное сообщение об ошибке означает "вы должны прикрепить сигнатуру типа"? В более общем смысле, что вообще означает эта ошибка типа, учитывая, что (см. Ниже) загружается RedBlackTree?

Что я загружаю

Каждый раз, когда я запускаю PAKCS, я запускаю :l All, Это загружает модуль, который читает, в соответствующей части,

module All ( module M
           ) where

import FiniteMap as M
import SetRBT as M
import RedBlackTree as M
import Tests as M

Эта идиома позволяет мне загружать все, что мне нужно (есть и другие), без необходимости выдавать длинную подсказку.

Если я бегу :modules похоже, что RedBlackTree должно быть определено:

All> :modules
Currently loaded modules:
All                       (loaded from ./.curry/pakcs/All.pl)
Prelude                   (loaded from /home/jeff/logic/curry/install/pakcs-2.0.2/lib/.curry/pakcs/Prelude.pl)
FiniteMap                 (loaded from /home/jeff/logic/curry/install/pakcs-2.0.2/lib/.curry/pakcs/FiniteMap.pl)
SetRBT                    (loaded from /home/jeff/logic/curry/install/pakcs-2.0.2/lib/.curry/pakcs/SetRBT.pl)
RedBlackTree              (loaded from /home/jeff/logic/curry/install/pakcs-2.0.2/lib/.curry/pakcs/RedBlackTree.pl)
Tests                     (loaded from ./.curry/pakcs/Tests.pl)
All>

1 ответ

Вы должны указать интерпретатору добавить ссылочные модули.

All> :add RedBlackTree SetRBT

... некоторые сообщения...

All SetRBT RedBlackTree> insertRBT 1 $ emptySetRBT (<)

и это будет работать.

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