So I've got a type Predicate{T}. It has the following methods defined:

function or{T}(first::Predicate{T}, rest::Predicate{T}...)
    ... create and simplify a predicate by oring them together...
end

+{T}(b1::Predicate{T}, b::Predicate{T}...) = begin
    println("+ called")
    or(b1, b...)
end

(I have similar code defining * to be "and".)

This line works:

@test( isequal(prop("foo") + prop("bar"), prop("bar") + prop("foo")) )

But this line fails: 

@test( !isequal(prop("foo") + prop("bar")*prop("baz"), prop("bar") * 
prop("baz")) )

ERROR: test error during !(isequal(prop("foo") + prop("bar") * 
prop("baz"),prop("bar") * prop("baz")))
error compiling +: error compiling or: error compiling setindex!: error 
compiling ht_keyindex2: unsupported or misplaced expression => in function 
ht_keyindex2
 in anonymous at test.jl:62
 in do_test at test.jl:37
 in include at ./boot.jl:245
 in include_from_node1 at loading.jl:128
 in process_options at ./client.jl:285
 in _start at ./client.jl:354
 in _start_3B_1714 at /usr/bin/../lib/x86_64-linux-gnu/julia/sys.so
while loading /home/stucchio/src/ad_exchange/test_BooleanAlgebra.jl, in 
expression starting on line 11

The debug string in the + method is never printed.

If I reverse the + and * in the expression, I get "error compiling *". 

I've searched for this error, and done the best I can reading the docs, but 
I'm now a bit stuck. Can anyone offer a suggestion?


Reply via email to