=encoding utf8

=head1 Name

Mo::builder - Adds the builder feature to Mo's has

=head1 Synopsis

    use Mo qw'builder';
    has name => ( builder => 'name_lookup' );

    sub name_lookup {
        my ($self) = @_;
        ...
    }

=head1 Description

Adds the C<builder> parameter to has, which expects a method name, which is
executed on C<$self> to set the attribute if it hasn't been set yet.

=head1 Laziness

Builders in Mo are lazy by default.
This can be changed by explicitly setting the C<lazy> argument to false, in
order to cause it to be initialized during instantiation.

    use Mo qw'builder';
    has status => ( builder => '_build_status' );             # lazy
    has source => ( builder => '_build_source', lazy => 1);   # lazy
    has target => ( builder => '_build_target', lazy => 0);   # eager

To change the default behavior and make builders to be initialized eagerly
by default, import C<nonlazy>.

    use Mo qw'builder nonlazy';
    has status => ( builder => '_build_status' );             # eager
    has source => ( builder => '_build_source', lazy => 1);   # lazy
    has target => ( builder => '_build_target', lazy => 0);   # eager

=cut
