takeFromForest :: Int -> Forest -> [Forest]
takeFromForest n forest = concatMap takeTree $ tailsAndInits forest where
  -- First forest can be harvested, second forest is old growth.
  takeTree :: Lumberyard -> [Forest]
  takeTree (t:ts, is)
    | size t >= n = map (++ ts ++ is) $ takeFromTree n t
    | otherwise     = []
takeFromForest :: Int -> Forest -> [Forest]
takeFromForest n forest = concatMap takeTree $ tailsAndInits forest where
  -- First forest can be harvested, second forest is old growth.
  takeTree :: Lumberyard -> [Forest]
  takeTree (t:ts, is)
    | size t >= n = map (++ ts ++ is) $ takeFromTree n t
    | otherwise     = []
takeFromForest n forest = concatMap takeTree $ tailsAndInits forest where
  -- First forest can be harvested, second forest is old growth.
  takeTree :: Lumberyard -> [Forest]
  takeTree (t:ts, is)
    | size t >= n = map (++ ts ++ is) $ takeFromTree n t
    | otherwise     = []