[[!comment format=mdwn username="joey" subject="""comment 6""" date="2016-03-09T15:01:05Z" content=""" I've added a prototype of `ensureProperty` that enforces at the type level that the property it runs will work on an OS that's passed to it. It was easier than I thought; I didn't turn out to need reification. Just pass in the outer OS: ensureProperty :: (CannotCombineOS outeros inneros (IntersectOSList outeros inneros) ~ CanCombineOS) => OSList outeros -> Property (OSList inneros) -> IO () ensureProperty outeros (Property inneros a) = a At this point, I'm confident this can be rolled out into propellor; there should be no big bumps in the road ahead. """]]