How do you “add” types together? Adding numbers makes sense, it has a real world equivalent. Two balls in a cup, add one ball and you have three balls in a cup. Add color to water and you have colored water. Simple. But types? The fuck?
It makes sense when using some fluent patterns and things like monads. For example:
User user = new User("Bob"); // User Class
UserWithPassword user = new User("Bob").WithPassword("Dylan123"); // UserWithPassword Type
A UserWithPassword type would then be a User object wrapper with some IWithPassword
interface
Then you could create extension methods on IWithPassword
objects and decorate those objects with password behavior
You can then have sort of polymorphic behavior by combining types together, and have different functionality available depending on which types you've added together
I think it does serve as a security layer. Like if you have vulnerable software running in a docker container, and people use that to gain "root access" - initially they're just inside the docker. Of course you need us to proper docker setup, like not just mount your entire file system into your dockers "because it's easier" and that kinda stuff.
There are a bunch of ways for Docker Breakout / Privilege Escalation - but still, it adds an extra step instead of having access to the entire system immediately. And again, it's just a matter of hardening your docker, and closing these open holes.