I wonder if you want a typeclass here, rather than a type? A Normal Rule is pretty much a State Transformer, while a Meta Rule seems like a higher-order function on Normal Rules[*]. These are different kinds of things --- and I say &quot;kind&quot; advisedly --- so perhaps better to define the specific commonalities you need than to try to shoehorn them both into one type.<div>

<br></div><div>[*]: Possibly related question: Can a Meta Rule depend upon an implementation detail of a Normal rule? In other words, does </div><div>   rule1 g == rule2 g</div><div>imply </div><div>   myMetaRule rule1 == myMetaRule rule2</div>

<div><br></div><div> ?</div><div><br></div><div><br></div>