local V=require(script.Enumerable)local F=require(script.Collection)local B=require(script.List)local n=require(script.LinkedList)local i=require(script.Queue)local s=require(script.LinkedQueue)local D=require(script.AbstractList)local E=require(script.ArrayList)local v=require(script.Deque)local d=require(script.LinkedDeque)local w=require(script.Stack)local K=require(script.ArrayStack)local b=require(script.Set)local e=require(script.HashSet)local P=require(script.Map)local O=require(script.HashMap)local r={}local o r.__index=r r.Enumerable=V r.Collection=F r.List=B r.AbstractList=D r.ArrayList=E r.LinkedList=n r.Queue=i r.LinkedQueue=s r.Deque=v r.LinkedDeque=d r.Stack=w r.ArrayStack=K r.Set=b r.HashSet=e r.Map=P r.HashMap=O function r.new()if o==nil then local V=setmetatable({},r)o=V end return o end return r.new()
--- The Monolith collections API.
-- Provides access to all library classes, and interfaces.
--
-- @module Monolith
-- @release 0.1.0
-- @license MIT

local Enumerable = require(script.Enumerable)
local Collection = require(script.Collection)
local List = require(script.List)
local LinkedList = require(script.LinkedList)
local Queue = require(script.Queue)
local LinkedQueue = require(script.LinkedQueue)
local AbstractList = require(script.AbstractList)
local ArrayList = require(script.ArrayList)
local Deque = require(script.Deque)
local LinkedDeque = require(script.LinkedDeque)
local Stack = require(script.Stack)
local ArrayStack = require(script.ArrayStack)
local Set = require(script.Set)
local HashSet = require(script.HashSet)
local Map = require(script.Map)
local HashMap = require(script.HashMap)

local Monolith = {}
local instance

Monolith.__index = Monolith

--- The @{Enumerable} interface.
--
-- @see Enumerable
Monolith.Enumerable = Enumerable

--- The @{Collection} interface.
--
-- @see Collection
Monolith.Collection = Collection

--- The @{List} interface.
--
-- @see List
Monolith.List = List

--- The @{AbstractList} abstract class.
--
-- @see AbstractList
Monolith.AbstractList = AbstractList

--- The @{ArrayList} class.
--
-- @see ArrayList
Monolith.ArrayList = ArrayList

--- The @{LinkedList} class.
--
-- @see LinkedList
Monolith.LinkedList = LinkedList

--- The @{Queue} interface.
--
-- @see Queue
Monolith.Queue = Queue

--- The @{LinkedQueue} class.
--
-- @see LinkedQueue
Monolith.LinkedQueue = LinkedQueue

--- The @{Deque} interface.
--
-- @see Deque
Monolith.Deque = Deque

--- The @{LinkedDeque} class.
--
-- @see LinkedDeque
Monolith.LinkedDeque = LinkedDeque

--- The @{Stack} interface.
--
-- @see Stack
Monolith.Stack = Stack

--- The @{ArrayStack} class.
--
-- @see ArrayStack
Monolith.ArrayStack = ArrayStack

--- The @{Set} class.
--
-- @see Set
Monolith.Set = Set

--- The @{HashSet} class.
--
-- @see HashSet
Monolith.HashSet = HashSet

--- The @{Map} class.
--
-- @see Map
Monolith.Map = Map

--- The @{HashSet} class.
--
-- @see HashMap
Monolith.HashMap = HashMap

--- Creates the Monolith API singleton.
-- This is called automatically and will only ever create a maximum of one
-- object. There is typically no need to explicitly call this.
--
-- @return the Monolith API
-- @local
-- @access private
function Monolith.new()
	if instance == nil then
		local self = setmetatable({}, Monolith)
		instance = self
	end
	return instance
end

return Monolith.new()
