我有很多可能会失败的函数,但是在其签名中定义了一个返回类型。由于我喜欢尽可能地定义变量的类型,因此我想定义一个Maybe子集用于此目的。我想到的是:
subset Maybe is export of Mu where Mu | Failure;
Run Code Online (Sandbox Code Playgroud)
这个的问题Failure是的子类Mu,因此当我真正想要的是能够Failure动态地匹配一种特定类型时,它将匹配所有内容。我的下一个想法是创建一个用作类型的参数化角色,因为我不想为也可以是的每个单个类型创建子集Failure。我想象它看起来像这样:
role Maybe[::T] {
# ...
}
sub foo(--> Int) { rand < 0.5 ?? 1 !! fail 'oops' }
my Maybe[Int] $foo = foo;
Run Code Online (Sandbox Code Playgroud)
只有我不知道要完成这项工作需要添加什么角色。是否可以创建这样的角色?如果不是,是否还有另一种方法可以创建类型以执行所需的操作?