wrapPred a | a == minBound = maxBound
           | otherwise     = pred a
wrapPred a | a == minBound = maxBound
           | otherwise     = pred a
wrapPred a | a == minBound = maxBound
           | otherwise     = pred a