[{"name":"Queue","comment":" This module provides functionalities as one-way queue. The worst-case time complexity of `enqueue` and `dequeue` is _O(1)_.\n\n\n# Types\n\n@docs Queue\n\n\n# Creation\n\n@docs empty, fromListLIFO, fromListFIFO\n\n\n# Query\n\n@docs isEmpty, isEqualTo, head, rear, length\n\n\n# Update\n\n@docs enqueue, dequeue\n\n\n# Deconstruction\n\n@docs toListLIFO, toListFIFO\n\n","unions":[{"name":"Queue","comment":" Represents one-way queue for any contents.\n","args":["a"],"cases":[]}],"aliases":[],"values":[{"name":"dequeue","comment":" Returns a queue with the oldest element removed.\n\n    intermediateQueue =\n        empty\n            |> enqueue \"e\" -- this will be removed\n            |> enqueue \"l\" -- first-in element in the final queue.\n            |> enqueue \"m\"\n\n    finalQueue =\n        dequeue intermediateQueue\n\n    finalQueue\n        |> toListFIFO -->\n            [ \"l\"\n            , \"m\"\n            ]\n\n","type":"Queue.Queue a -> Queue.Queue a"},{"name":"empty","comment":" Represents queue with no element.\n\n    empty |> isEmpty --> True\n\n    empty |> head --> Nothing\n\n    empty |> rear --> Nothing\n\n","type":"Queue.Queue a"},{"name":"enqueue","comment":" Returns a queue with the given element attached on the rear side.\n\n    empty\n        |> enqueue \"e\"\n        -- first in\n        |> enqueue \"l\"\n        |> enqueue \"m\"\n        |> toListFIFO\n            -->\n            [ \"e\", \"l\", \"m\" ]\n\n","type":"a -> Queue.Queue a -> Queue.Queue a"},{"name":"fromListFIFO","comment":" Converts a `List` to a `Queue` in a way that first-in element in the list becomes first-out element in the queue.\n\n    list : List String\n    list =\n        []\n            |> (::) \"m\" -- Here is first-in element.\n            |> (::) \"l\"\n            |> (::) \"e\"\n\n    queue : Queue String\n    queue =\n        fromListFIFO list\n\n    head queue --> Just \"m\"\n\n    rear queue --> Just \"e\"\n\n","type":"List.List a -> Queue.Queue a"},{"name":"fromListLIFO","comment":" Converts a `List` to a `Queue` in a way that last-in element in the list becomes first-out element in the queue.\n\n    list : List String\n    list =\n        []\n            |> (::) \"m\"\n            |> (::) \"l\"\n            |> (::) \"e\" -- Here is last-in element.\n\n    queue : Queue String\n    queue =\n        fromListLIFO list\n\n    head queue --> Just \"e\"\n\n    rear queue --> Just \"m\"\n\n","type":"List.List a -> Queue.Queue a"},{"name":"head","comment":" Returns the oldest element in the queue wrapped in `Maybe`. Takes _O(1)_ time.\n\n    queue : Queue String\n    queue =\n        empty\n            |> enqueue \"e\"\n            |> enqueue \"l\"\n            |> enqueue \"m\"\n\n    head queue --> Just \"e\"\n\n    head empty --> Nothing\n\n","type":"Queue.Queue a -> Maybe.Maybe a"},{"name":"isEmpty","comment":" Returns `True` if and only if the queue has no element.\n\n    empty\n        |> isEmpty\n            -->\n            True\n\n    empty\n        |> enqueue \"test\"\n        |> isEmpty\n            -->\n            False\n\n","type":"Queue.Queue a -> Basics.Bool"},{"name":"isEqualTo","comment":" Compare the contents and the order in two queues. Returns `True` if and only if all the elements contained and the orders are the same.\nNote that comparison in `==` may return false even if the contents are the same, because there is some redunduncy in the inner structure of the queue. Takes _O(n)_ time.\n\n    q1 : Queue String\n    q1 =\n        empty\n            |> enqueue \"e\"\n            |> enqueue \"l\"\n            |> enqueue \"m\"\n            |> dequeue\n\n    q2 : Queue String\n    q2 =\n        empty\n            |> enqueue \"e\"\n            |> dequeue\n            |> enqueue \"l\"\n            |> enqueue \"m\"\n\n    q3 : Queue String\n    q3 =\n        empty\n            |> enqueue \"m\"\n            |> enqueue \"l\"\n            |> enqueue \"e\"\n            |> dequeue\n\n    q1 |> isEqualTo q2 --> True\n\n    q1 |> isEqualTo q3 --> False\n\n","type":"Queue.Queue a -> Queue.Queue a -> Basics.Bool"},{"name":"length","comment":" Returns how many elements the Queue has. Takes _O(log_n)\\_ time.\n","type":"Queue.Queue a -> Basics.Int"},{"name":"rear","comment":" Returns the newest element in the queue wrapped in `Maybe`. Takes _O(log_n)\\_ time at worst case.\n\n    queue : Queue String\n    queue =\n        empty\n            |> enqueue \"e\"\n            |> enqueue \"l\"\n            |> enqueue \"m\"\n\n    rear queue --> Just \"m\"\n\n    rear empty --> Nothing\n\n","type":"Queue.Queue a -> Maybe.Maybe a"},{"name":"toListFIFO","comment":" Converts a `Queue` to a `List` in a way that first-in element in the queue becomes first-out element in the list.\n\n    queue : Queue String\n    queue =\n        empty\n            |> enqueue \"e\" --Here is last-in element.\n            |> enqueue \"l\"\n            |> enqueue \"m\"\n\n    toListFIFO queue --> [\"e\",\"l\",\"m\"]\n\n","type":"Queue.Queue a -> List.List a"},{"name":"toListLIFO","comment":" Converts a `Queue` to a `List` in a way that last-in element in the queue becomes first-out element in the list.\n\n    queue : Queue String\n    queue =\n        empty\n            |> enqueue \"e\"\n            |> enqueue \"l\"\n            |> enqueue \"m\" --Here is last-in element.\n\n    toListLIFO queue --> [\"m\",\"l\",\"e\"]\n\n","type":"Queue.Queue a -> List.List a"}],"binops":[]}]