# Module DA.Set¶

Note: This is only supported in DAML-LF 1.11 or later.

This module exports the generic set type `Set k`

and associated
functions. This module should be imported qualified, for example:

```
import DA.Set (Set)
import DA.Set qualified as S
```

This will give access to the `Set`

type, and the various operations
as `S.lookup`

, `S.insert`

, `S.fromList`

, etc.

`Set k`

internally uses the built-in order for the type `k`

.
This means that keys that contain functions are not comparable
and will result in runtime errors. To prevent this, the `Ord k`

instance is required for most set operations. It is recommended to
only use `Set k`

for key types that have an `Ord k`

instance
that is derived automatically using `deriving`

:

```
data K = ...
deriving (Eq, Ord)
```

This includes all built-in types that aren’t function types, such as
`Int`

, `Text`

, `Bool`

, `(a, b)`

assuming `a`

and `b`

have default
`Ord`

instances, `Optional t`

and `[t]`

assuming `t`

has a
default `Ord`

instance, `Map k v`

assuming `k`

and `v`

have
default `Ord`

instances, and `Set k`

assuming `k`

has a
default `Ord`

instance.

## Functions¶

- insert
: Ord k => k -> Set k -> Set k

Insert an element in a set. If the set already contains the element, this returns the set unchanged.

- intersection
: Ord k => Set k -> Set k -> Set k

The intersection of two sets.

- difference
: Ord k => Set k -> Set k -> Set k

`difference x y`

returns the set consisting of all elements in`x`

that are not in`y`

.> > > fromList [1, 2, 3] difference fromList [1, 4] > > > fromList [2, 3]