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 (<)
и это будет работать.