sure...
role Fish { has Str $.name }
class Starfish does Fish { has Str $.favourite-colour; }
class Jellyfish does Fish { has Bool $.jiggly }
sub handle-fish(Fish $fish) {
given $fish {
when Starfish { say .favourite-colour }
when Jellyfish { say .name }
}
}
handle-fish Starfish.new: :name("Lucy"), :favourite-colour("Pink");
I would probably reach for multi-dispatch... role Fish { has Str $.name }
class Starfish does Fish { has Str $.favourite-colour; }
class Jellyfish does Fish { has Bool $.jiggly }
multi sub handle-fish(Starfish $fish) { say $fish.favourite-colour }
multi sub handle-fish(Jellyfish $fish) { say $fish.name }
handle-fish Starfish.new: :name("Lucy"), :favourite-colour("Pink");
Here's the other Gleam concurrency example in Raku for good measure: