# 2o: Normalizing Containers

## `+jar` <a href="#jar" id="jar"></a>

`$mold` generator. A `+jar` is a `+map` of `+list`.

Produces the `$mold` of a `+map` from `key` to lists of `value`.

#### Accepts

`$key` is a `$mold`, and is the type of the `+map` key.

`$value` is a `$mold`, and is the type of items in the lists. The lists are the values in the `+map`.

#### Produces

A `$mold`.

#### Source

```hoon
++  jar  |$  [key value]  (map key (list value))
```

#### Examples

```
> `(jar @t @ud)`(malt ~[['foo' ~[1 2 3]] ['bar' ~[4 5 6]]])
{[p='bar' q=~[4 5 6]] [p='foo' q=~[1 2 3]]}
```

#### Discussion

See also: [`+ja`](https://docs.urbit.org/hoon/2j#ja), [`+by`](https://docs.urbit.org/hoon/stdlib/2i), [`+map`](#map), [`+list`](https://docs.urbit.org/hoon/stdlib/2b)s.

***

## `+jug` <a href="#jug" id="jug"></a>

`$mold` generator. Produces a `+jug`, which is a `(map key (set value))`.

#### Accepts

`$key` is a `$mold`, and is the type of the `+map` key.

`$value` is a `$mold`, and is the type of items in the `+set`s. The `+set`s are the values in the `+map`.

#### Produces

A `$mold`.

#### Source

```hoon
++  jug  |$  [key value]  (map key (set value))
```

#### Examples

```
> `(jug @t @ud)`(malt ~[['foo' (silt ~[1 2 3])] ['bar' (silt ~[4 5 6])]])
{[p='bar' q={5 6 4}] [p='foo' q={1 2 3}]}
```

#### Discussion

See also: [`+ju`](https://docs.urbit.org/hoon/2j#ju), [`+by`](https://docs.urbit.org/hoon/stdlib/2i), [`+map`](#map), [`+set`](#set).

***

## `+map` <a href="#map" id="map"></a>

A `+map` is a [treap](https://en.wikipedia.org/wiki/Treap) of key-value pairs.

Produces the `$mold` of a `+map` from `key` to `value`.

#### Accepts

`$key` is a `$mold`.

`$value` is a `$mold`.

#### Produces

A `$mold`.

#### Source

```hoon
++  map
  |$  [key value]
  $|  (tree (pair key value))
  |=(a=(tree (pair)) ?:(=(~ a) & ~(apt by a)))
```

#### Examples

```
> ? *(map @t @ud)
  nlr([p=@t q=@ud])
{}
```

```
> `(map @t @ud)`(malt ~[['foo' 1] ['bar' 2] ['baz' 3]])
{[p='bar' q=2] [p='baz' q=3] [p='foo' q=1]}
```

#### Discussion

See also: [`+by`](https://docs.urbit.org/hoon/stdlib/2i).

***

## `+qeu` <a href="#qeu" id="qeu"></a>

Queue.

`$mold` generator. An ordered [treap](http://en.wikipedia.org/wiki/Treap) of items.

Produces the `$mold` of a queue of `$item`.

#### Accepts

`$item` is a `$mold`.

#### Produces

A `$mold`.

#### Source

```hoon
++  qeu
  |$  [item]
  $|  (tree item)
  |=(a=(tree) ?:(=(~ a) & ~(apt to a)))
```

#### Examples

```
> `(qeu @ud)`(~(gas to *(qeu @ud)) ~[1 2 3 4 5])
{5 4 3 2 1}
```

#### Discussion

See also: [`+to`](https://docs.urbit.org/hoon/2k#to).

***

## `+set` <a href="#set" id="set"></a>

Set.

`$mold` generator. A `+set` is an unordered [treap](http://en.wikipedia.org/wiki/Treap) of items.

Produces the `$mold` of a `+set` of `$item`.

#### Accepts

`$item` is a `$mold`.

#### Produces

A `$mold`.

#### Source

```hoon
++  set
  |$  [item]
  $|  (tree item)
  |=(a=(tree) ?:(=(~ a) & ~(apt in a)))
```

#### Examples

```
> `(set @ud)`(silt ~[1 2 3 4 5])
{5 1 2 3 4}
```

#### Discussion

See also: [`+in`](https://docs.urbit.org/hoon/stdlib/2h).

***
