has predicate => (is => 'ro', isa => Str, required => 1);
-has args => (is => 'ro', isa => ArrayRef, required => 1);
+has args => (is => 'ro', isa => ArrayRef[Str|Value], required => 1);
-has introduced_names => (is => 'ro', isa => HashRef, required => 1);
+has introduced_names => (is => 'ro', isa => HashRef[One], required => 1);
-has required_names => (is => 'ro', isa => HashRef, required => 1);
+has required_names => (is => 'ro', isa => HashRef[One], required => 1);
sub resolve_for {
my ($self, $scope) = @_;
package DX::PropositionSequence;
-use Types::Standard qw(ArrayRef HashRef);
+use Types::Standard qw(HashRef);
use DX::Class;
-has members => (is => 'ro', isa => ArrayRef[Proposition], required => 1);
+has members => (is => 'ro', isa => PropositionList, required => 1);
-has external_names => (is => 'ro', isa => HashRef, required => 1);
+has external_names => (is => 'ro', isa => HashRef[One], required => 1);
-has internal_names => (is => 'ro', isa => HashRef, required => 1);
+has internal_names => (is => 'ro', isa => HashRef[One], required => 1);
sub new_empty {
shift->new(