[[!comment format=mdwn username="spwhitton" subject="comment 5" date="2016-06-07T07:32:49Z" content=""" Unfortunately, the more general type doesn't seem to work: withMyAcc :: (SingI outer, Cannot_ensureProperty_WithInfo inner ~ 'True, NotSuperset (Targets inner) (Targets outer) ~ 'CanCombine) => Desc -> (User -> Property (MetaTypes inner)) -> Property (MetaTypes outer) withMyAcc desc mkp = property' desc $ \w -> do u <- getMyAcc ensureProperty w (mkp u) accountForSean :: Property DebianLike accountForSean = withMyAcc \"account for Sean\" User.accountFor yields src/Propellor/Property/SiteSpecific/SPW/Account.hs:85:18: Couldn't match kind ‘*’ with ‘MetaType’ Expected type: Property DebianLike Actual type: Property (MetaTypes outer0) In the expression: withMyAcc \"account for Sean\" User.accountFor In an equation for ‘accountForSean’: accountForSean = withMyAcc \"account for Sean\" User.accountFor src/Propellor/Property/SiteSpecific/SPW/Account.hs:85:47: Couldn't match kind ‘MetaType’ with ‘*’ Expected type: User -> Property (MetaTypes inner0) Actual type: User -> Property DebianLike In the second argument of ‘withMyAcc’, namely ‘User.accountFor’ In the expression: withMyAcc \"account for Sean\" User.accountFor """]]