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

Проблема

Мой код включает в себя модуль под названием Тесты, который определяет следующее:

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

0 голосов
/ 30 ноября 2018

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

All> :add RedBlackTree SetRBT

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

All SetRBT RedBlackTree> insertRBT 1 $ emptySetRBT (<)

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

...