Unlike its bigger brother, Moo does not come with a built-in type system. Instead, it allows us to add home-made subroutines to each attribute that will check the type when we call the constructor or a setter.
MooX::late is a an extension for Moo, that provides several feature available in Moose, but not in Moo.
For example, it allows us to set type-constraints in a declarative way using Types::Standard as the back-end.
Let's see a bit more details how does that work: