First of all you're declaring type myOffset and then using MyOffset, note that case is different. Anyway, let's assume that's typo and you're using MyOffset everywhere. If you're declaring your attribute as
has my_offset => (is =>'rw', isa => 'MyOffset');
Moose will expect
my_offset to be reference to 'MyOffset'. And it has no idea how to coerce this from integer. Now, if you're declaring your attribute as
has my_offset => (is =>'rw', isa => MyOffset);
it will call function
MyOffset(), which returns "myTypes::MyOffset", so it is the same as if you'd write it as:
has my_offset => (is => 'rw', isa => "myTypes::MyOffset");
and
myTypes::MyOffset may be coerced from integer.