--- /dev/null
+#!perl -T
+
+use strict;
+use warnings;
+
+use Test::More tests => 5 + 4;
+
+{
+ package MyTypes;
+
+ BEGIN { require Lexical::Types; }
+
+ sub import {
+ eval 'package Str; package Int';
+ Lexical::Types->import(
+ as => sub { __PACKAGE__, 'new_' . lc($_[0]) }
+ );
+ }
+
+ sub unimport {
+ Lexical::Types->unimport;
+ }
+
+ sub new_str {
+ $_[1] = 'str:' . (caller(0))[2];
+ Test::More::is($_[2], 'Str', 'original type is correct');
+ ();
+ }
+
+ sub new_int {
+ $_[1] = (caller(0))[2];
+ Test::More::is($_[2], 'Int', 'original type is correct');
+ ();
+ }
+}
+
+{
+ BEGIN { MyTypes->import }
+ my Str $x;
+ is $x, 'str:' . (__LINE__-1), 'MyTypes->new_str 1';
+ {
+ BEGIN { MyTypes->unimport }
+ my Str $y;
+ is $y, undef, 'pragma not in use';
+ {
+ BEGIN { MyTypes->import }
+ my Int $z;
+ is $z, __LINE__-1, 'MyTypes->new_int 1';
+ }
+ }
+ my Str $y;
+ is $y, 'str:' . (__LINE__-1), 'MyTypes->new_str 2';
+ my Int $z;
+ is $z, __LINE__-1, 'MyTypes->new_int 2';
+}