I reproduced this in our own test suite. Reported on 
https://github.com/rakudo/rakudo/issues/1332
(gonna close this ticket in favour of that Issue)


> It works, but occasionally throws:

Note that it's a warning, not an exception.
You can work-around this bug with `andthen` operator: `(require 
SomethingOrOther) andthen Nil;`


> merely creating a Failure object does not mean a Failure has
> been experienced -- it just means you have a Failure you can
> throw at the user at an appropriate time.

Can't quite picture a scenario where you'd want to create a Failure,
but not indicate a failure. If there's no failure, don't make a Failure,
and if the user wishes to ignore it, then can easily disarm it by evaluating
it in boolean context or in anything that'd call .defined on it.


> If the user never steps on the land-mine you planted, then that
> means they were not interested in using
> the part of your module that was unhappy, so no harm done.

It often means they made a mistake in their code and they're program is
progressing despite encountering an error:

    sub load-customer-orders {
        Failure.new: "Customer canceled all the orders"
    }

    my $n-molds = load-customer-orders.elems;
    say "Making $n-molds molds for the widgets!";
    say "I sure hope the number is accurate. These are expensive!";

    for ^100 { $ = eager -1000..rand }

    # OUTPUT:
    # 2017.11.50 zoffix@VirtualBox~$ perl6 /tmp/z.p6
    # Making 1 molds for the widgets!!
    # I sure hope the number is accurate. These are expensive!
    # WARNING: unhandled Failure detected in DESTROY. If you meant to ignore 
it, you 
    # can mark it as handled by calling .Bool, .so, .not, or .defined methods. 
The # Failure was:
    # Customer canceled all the orders
    #   in block <unit> at /tmp/z.p6 line 5
    #
    # 2017.11.50 zoffix@VirtualBox~$

Reply via email to