fillQuantityMaybe :: (EuclideanSpace3D, ResidualSpace) -- ^ Package and picked residual space
                -> AxeOrder -- ^ axe fill order
                -> Quantity -- ^ quantity of packages (to be maximized in the filling)
                -> Maybe (ResidualSpace, EuclideanSpace3D, [Vec3], Quantity) -- ^ used residual space, ackage, all translation vectors and used quantity or @Nothing@
                                                            -- if not a single item fits
fillQuantityMaybe (space, residual) axeOrder quantity
  | quantity == 0
  = Nothing
  | Just (es, vectors, possibleQuantity) <- fillResidual (space, residual) quantity axeOrder
  , not $ L.null vectors
  = Just (residual, es, vectors, possibleQuantity)
  | otherwise
  = Nothing
fillQuantityMaybe :: (EuclideanSpace3D, ResidualSpace) -- ^ Package and picked residual space
                -> AxeOrder -- ^ axe fill order
                -> Quantity -- ^ quantity of packages (to be maximized in the filling)
                -> Maybe (ResidualSpace, EuclideanSpace3D, [Vec3], Quantity)
fillQuantityMaybe (space, residual) axeOrder quantity
  | quantity == 0
  = Nothing
  | Just (es, vectors, possibleQuantity) <- fillResidual (space, residual) quantity axeOrder
  , not $ L.null vectors
  = Just (residual, es, vectors, possibleQuantity)
  | otherwise
  = Nothing
fillQuantityMaybe (space, residual) axeOrder quantity
  | quantity == 0
  = Nothing
  | Just (es, vectors, possibleQuantity) <- fillResidual (space, residual) quantity axeOrder
  , not $ L.null vectors
  = Just (residual, es, vectors, possibleQuantity)
  | otherwise
  = Nothing