[[!comment format=mdwn username="joey" subject="""comment 1""" date="2019-04-01T15:54:33Z" content=""" Building that, the first error message is this: Expected type: RevertableProperty (HasInfo + DebianLike) UnixLike Actual type: RevertableProperty (CombinedType (Property (Propellor.Types.MetaTypes.MetaTypes '['Propellor.Types.MetaTypes.WithInfo, 'Propellor.Types.MetaTypes.Targeting 'OSDebian, 'Propellor.Types.MetaTypes.Targeting 'OSBuntish, 'Propellor.Types.MetaTypes.Targeting 'OSArchLinux, 'Propellor.Types.MetaTypes.Targeting 'OSFreeBSD])) (Property UnixLike)) UnixLike It's really complaining that it expected HasInfo + DebianLike and got HasInfo + UnixLike; ie your property seems to also support ArchLinux and FreeBSD. (Whether it really does, I don't know.) There seem to be several similar errors in the supported OS's, which don't help with focusing on the other errors.. I have not found a solution to all of those, but part of the problem is that, inside a where clause a type annotation with a type variable such as `i` is not understood to refer to the same variable in the outer type annotation. There's some ghc extension that enables that, but I can never remember its name. After removing those inner type annotations, the remaining type error was with userGrantedProp.. So I removed its type annotation as well and let ghc infer its type. (Had to enable LANGUAGE TypeFamilies for it to be able to.) Here's what ghc thinks it is: Top-level binding with no type signature: userGrantedProp :: (Propellor.Types.Singletons.SingI outer, Propellor.Types.MetaTypes.NotSuperset '['Propellor.Types.MetaTypes.Targeting 'OSDebian, 'Propellor.Types.MetaTypes.Targeting 'OSBuntish, 'Propellor.Types.MetaTypes.Targeting 'OSArchLinux, 'Propellor.Types.MetaTypes.Targeting 'OSFreeBSD] (Propellor.Types.MetaTypes.Targets outer) ~ 'Propellor.Types.MetaTypes.CanCombine) => User -> [Privilege] -> ((((String -> Propellor Result) -> Propellor Result) -> Property (Propellor.Types.MetaTypes.MetaTypes outer)) -> Property setupmetatypes) -> Desc -> ([Char] -> String -> [Char] -> [Char]) -> ([Char] -> String -> [Char] -> String) -> RevertableProperty setupmetatypes UnixLike That's not very human friendly a way to write its type, but it gives some good direction. Note in particular that the type of withPassword seems to involve two different types of Property, not the single `Property i` that your original type uses in both places. I have a feeling though that there may be a bug in the code around withPassword that is leading to this type and that the type error is not really the root problem. """]]