move the dynamic composeable higher-order ghost state logic up so it does not seem to depend on a language