please check this construction, the compiler (build 7500) has a problem with it:
Code: Select all
domains
record{Type} =
empty;
node(Type Item).
class predicates
compareRecord : (comparator{Type} CompareItem)
-> comparator{record{Type}} CompareRecord.
clauses
compareRecord(CompareItem) =
{ (RecordA, RecordB) = CompareItem(ItemA, ItemB) :-
node(ItemA) == RecordA,
node(ItemB) == RecordB
}.
clauses
run() :-
_ = compareRecord(compare).
Code: Select all
domains
record{Type} =
empty;
node(Type Item).
class predicates
compareRecord : (comparator{Type} CompareItem)
-> comparator{record{Type}} CompareRecord.
clauses
compareRecord(CompareItem) =
{ (RecordA, RecordB) = CompareItem(ItemA, ItemB) :-
if
node(ItemA) = RecordA,
node(ItemB) = RecordB then
else
exception::raise_error()
end if
}.
clauses
run() :-
_ = compareRecord(compare).
Martin