drawSwap :: Double -> Double -> [Double] -> Diagram B
drawSwap t1 t2 cs = targ # translateY t1
                 <> targ # translateY t2
                 <> controls
                 <> line
  where targ =     drawLine 1 1  # center
                <> drawLine 1 (-1) # center
        line = drawLine 0 (top - bottom)
             # translateY bottom
          where top = maximum (t1:t2:cs)
                bottom = minimum (t1:t2:cs)
        controls = mconcat . map drawCtrl $ cs
drawSwap :: Double -> Double -> [Double] -> Diagram B
drawSwap t1 t2 cs = targ # translateY t1
                 <> targ # translateY t2
                 <> controls
                 <> line
  where targ =     drawLine 1 1  # center
                <> drawLine 1 (-1) # center
        line = drawLine 0 (top - bottom)
             # translateY bottom
          where top = maximum (t1:t2:cs)
                bottom = minimum (t1:t2:cs)
        controls = mconcat . map drawCtrl $ cs
drawSwap t1 t2 cs = targ # translateY t1
                 <> targ # translateY t2
                 <> controls
                 <> line
  where targ =     drawLine 1 1  # center
                <> drawLine 1 (-1) # center
        line = drawLine 0 (top - bottom)
             # translateY bottom
          where top = maximum (t1:t2:cs)
                bottom = minimum (t1:t2:cs)
        controls = mconcat . map drawCtrl $ cs