Unchecked Type and Effect Casts
Flix also supports unchecked type and effect casts.
Unchecked Type Casts
An unchecked type cast instructs the compiler that an expression has a specific type.
Warning: Type casts are very dangerous and should be used with utmost caution!
Flix programmers should normally never need to use an unchecked type cast.
Example: Safe Cast to a Super-Type
The expression below casts a String to an Object:
unchecked_cast("Hello World" as ##java.lang.Object)
Note: It is safer to use the checked_cast expression.
Example: Safe Cast from Null to an Object-Type
The expression below casts the null value (of type Null) to String:
unchecked_cast(null as ##java.lang.String)
Note: It is safer to use the checked_cast expression.
Example: Unsafe Type Cast
The expression below contains an illegal cast and triggers a
ClassCastException at runtime:
unchecked_cast((123, 456) as ##java.lang.Integer)
Effect Casts
An unchecked effect cast instructs the compiler that an expression has a specific effect.
Warning: Effect casts are extremely dangerous and should be used with extreme caution!
Flix programmers should normally never need to use an unchecked effect cast.
Example: Unsafe Effect Cast
We can pretend an impure expression is pure:
def main(): Unit =
unchecked_cast(println("Hello World") as _ \ {})
Here we call println which has the IO effect and then we explicitly, and
unsafely, cast away the effect, pretending that the expression is pure.
Warning: Never cast effectful expressions to pure. You have been warned.