On Sat, 30 Sep 2017 13:47:22 -0700, allber...@gmail.com wrote:
> So I included at least one discussion in the ticket that was utterly
> pointless and left unread. At this point I'm just going to assume only
> half-exposing the underlying mechanism is considered a feature and I need
> to use a different language when it's not.

You mean the part about exposing different stat() error conditions?

A `Failure` wraps a typed exception, which you can get at by calling the 
`.exception` method on it:

    my $is-file = do given $path.f -> $result {
        with $result.?exception {
            when X::IO::DoesNotExist { ... }
            when ...                 { ... }
            when ...                 { ... }
            default                  { ... }
        }
        $result.so
    }

(...or by letting it throw and then using a CATCH block.)

Exceptions also have type-specific attributes which can hold further details to 
differentiate similar but different error conditions.

If file tests should be made to expose more fine-grained error states (probably 
a good idea), they can use those two mechanisms without the need to change 
anything about Failure or add new syntax.

PS: At the end of the day, "only half-exposing the underlying mechanism" of 
low-level operating-system APIs is to be expected though, for a high-level 
language that wants to be cross-platform and user-friendly. Getting full access 
to specific operating-system APIs is what third-party modules such as [1] are 
for. Thankfully, Perl 6's NativeCall interface makes them relatively easy to 
write.


---
[1] https://github.com/cspencer/perl6-posix

Reply via email to