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

# a variable context
package Perl::Cxt;

# from src/Pugs/Types.hs

# I can't think of a simple way to express the junctive, higher order
# nature of the Cxt type.  The below is expressive enough to do the
# same thing, but the conversion is a bit "lossy".
#
# has $.cxt enum« CxtVoid CxtItem CxtSlurpy »;
# has Perl::Type $.type;  # for slurpy/item types

# On the other hand, we could actually make it a real junctive type.

type CxtVoid;  # is that enough?

# here, I think we have the same problem as with Set; how do you
# specify a higher order type?
type CxtItem ( Perl::Type );
type CxtSlurpy ( Perl::Type );

type Perl::Cxt is CxtVoid | CxtItem | CxtSlurpy;

# in fact, maybe the following syntax could auto-define the extra
# types for 1 to 1 correspondance!  :)
#
#  type Perl::Cxt is CxtVoid
#                  | CxtItem (Perl::Type)
#                  | CxtSlurpy (Perl::Type) );