{-# LANGUAGE TypeFamilies #-} module Propellor.Types.Container where -- | A value that can be bound between the host and a container. -- -- For example, a Bound Port is a Port on the container that is bound to -- a Port on the host. data Bound v = Bound { hostSide :: v , containerSide :: v } -- | Create a Bound value, from two different values for the host and -- container. -- -- For example, @Port 8080 -<- Port 80@ means that port 8080 on the host -- is bound to port 80 from the container. (-<-) :: (hostv ~ v, containerv ~ v) => hostv -> containerv -> Bound v (-<-) = Bound -- | Flipped version of -<- with the container value first and host value -- second. (->-) :: (containerv ~ v, hostv ~ v) => containerv -> hostv -> Bound v (->-) = flip (-<-) -- | Create a Bound value, that is the same on both the host and container. same :: v -> Bound v same v = Bound v v