See <http://stackoverflow.com/questions/26027765/using-types-to-prevent-conflicting-port-numbers-in-a-list> --[[Joey]]

Needs ghc newer than 7.6.3. It may be possible to port Data.Type.Equality
and Data.Type.Bool to older versions; I got them to compile but they didn't
work right. --[[Joey]]

I have a `resourceconflict` branch that adds this in Propellor.Resources,
but it is not yet integrated into the Property types. --[[Joey]]

[[!tag user/joey]]

> On `typed-os-requirements` branch, I have the UsingPort 80 singleton
> implemented. As soon as I tried to apply it to some apache properties
> though, I realized a problem -- If multiple apache vhosts are defined
> each as its own property, then each of those properties can't have
> UsingPort 80. Because the idea is to not allow combining 2 properties
> that use the same pprt.
> 
> Similarly, Apache.installed can't have UsingPort 80, because each of the
> vhost properties requires that, and would inherit it.
> 
> So, this could be used for non-vhost stuff, like simple web servers, tor
> nodes, etc. But how to handle vhosts?
> 
> Of course, there could be a single property that defines all of a host's
> apache vhosts, and it could then have UsingPort 80. But that loses the
> flexible composition of properties.
> 
> I suppose we could include the server: `UsingPort 80 Apache`
> (or `UsingPort 80 "apache"` to avoid needing a data type with all the
> servers. Or even write it `"apache" '> 80`)  
> And allow combining properties that have the same server on the same
> port. Don't allow combining `UsingPort 80 Apache` with `UsingPort 80 Ngnix`
> 
> --[[Joey]] 
