The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

FP::PureHash

SYNOPSIS

    use FP::PureHash;
    use FP::Show; use FP::Predicates;

    my $h = purehash hi => 123, there => "World";
    my $h2 = $h->set("hi", "again");
    is $h->ref("there"), "World";
    is $$h{there}, "World";
    is show($h), "purehash('hi' => 123, 'there' => 'World')";
    is show($h2), "purehash('hi' => 'again', 'there' => 'World')";
    is is_pure($h2), 1;

    like( (eval { purehash hi => 1, hi => 1, there => 2 } || $@),
          qr/^duplicate key: 'hi' at/ );
    like( (eval { $$h{there_} || 1} || $@),
          # the detailed exception message may change!
          qr/^Attempt to access disallowed key 'there_' in a restricted hash/ );

DESCRIPTION

Hash tables, currently based simply on Perl's internal hashes. They are immutable, and restricted which means that accessing non-existing keys yields an exception.

TODO

- performant functional updates (currently the `set` method simply copies the whole table)

- more methods, move/adapt set functionality from FP::Hash and FP::HashSet

- a maybe_ref that returns FP::Failure or FP::Maybe ?

- non-string keys?

SEE ALSO

Implements: FP::Abstract::Pure, FP::Abstract::Map, FP::Abstract::Equal, FP::Abstract::Show

NOTE

This is alpha software! Read the status section in the package README or on the website.