- assigned_to: nobody --> caplet
From
http://www.eros-os.org/pipermail/e-lang/2004-August/009971.html
> The E programmer can already express a guard that
captures the disjunctive type intended for these cases:
>
> ? var x :(int >= 0 | float64 <=> Infinity) := 3
> # problem: Failed: jvm internal bug: not IEEE
representation
>
> Unfortunately, as we see, this doesn't yet work in
the current implementation.
Since (int >= 0) is a kind of guard, shouldn't
? (int >= 0) | Same[Infinity]
# value: any[(int >= 0), Same[Infinity]
work, assuming the obvious definition of Same?
(Currently, it appears that (int >= 0) assumes that the
argument to or/1 is another region.)
Also, even without the JVM bug the code you give
wouldn't work in the current implementation:
? (int > 0 | float64 > 50.0)
# value: <***an EImplByProxy throws a
ClassCastException when printed***>
? (int > 0 | float64 > 50.0).coerce(1)
# value: 1
? (int > 0 | float64 > 50.0).coerce(43.0)
# problem: <ClassCastException: Must be an EInt: class
java.lang.Double(43.0)>
Followups 2004-Aug-13 05:05 markm
I'm sure the same problem would also occur with the
other boolean guard-combination operators: "&" (and/1),
! (not/0), &! (butNot/1), were these currently
implemented.