This seems to me to be a classic example of poorly implementing first-class functions in an OO language to solve a simple problem. Or rather, this solution bestows a level of needless complexity and jargon that would make a LISPer cry.<p>As soon as you want to start encoding &quot;rules&quot; for &quot;encoding the allowed transformations of your data,&quot; then congratulations, you&#x27;ve invented something called a &quot;function.&quot; Functions are rules for expressing what you are allowed to do.<p><pre><code>    fn wield(Wizard, Wand) &#x2F;&#x2F; Wizards can wield wands.
    fn wield(Warrior, Sword) &#x2F;&#x2F; Warriors can wield swords.
    fn capability(Player, wield_fn=wield(Player, Weapon)) &#x2F;&#x2F; Players can wield weapons.
</code></pre>
Now there&#x27;s no way to violate these rules unless your users can compile functions and pass them into your code.<p>&gt;There is no need to figure out “which class does the rule about paladins vs werewolves go in?” The rule goes in a rulebook, end of story. Like I said, Inform7 is amazing.<p>I&#x27;ve never seen someone so impressed by global functions before.