Unison provides a variety of data types for managing collections of values. We'll show the basics of how to create instances of common collection types here.
One of the common things you'll be doing as a Unison programmer is managing ordered collections of one type or another. One of Unison's native data structures for this is
List,which we can create between square brackets.
desserts : [Text] desserts = ["Eclair", "Peach cobbler", "Ice cream"]
Lists can only contain values of one type at a time, and areeagerly evaluated.
An empty list is simply represented
For the curious, the documentation for
Listdescribes the underlying data structure and details many of the common operations you might perform on
Maptype is Unison's way of mapping unique keys to values.
You can create a map with a single object with
Map.singleton 1 "a"where
1is the key and
"a"is the value associated with that key.
Currently Unison does not have special
Mapconstruction syntax so one easy way to create a multi item map is from a
Map.fromList [(1, "a"), (2, "b"), (3, "c")]⧨internal.Bin 3 2 "b" (internal.Bin 1 1 "a" internal.Tip internal.Tip) (internal.Bin 1 3 "c" internal.Tip internal.Tip)
What's printed above for a
Mapmight look more complicated than it really is.
internal.Tipare just thedata constructorsfor
Map.You'll likely be working with Maps through functions in the base library instead of dealing with these terms directly. Check out a few
Mapmanipulation functions with
find base.Mapin the UCM.
docs Mapcommand in the UCM to read the
Mapwhose values are all Unit,
superProgram : Boolean -> Nat
superProgram bool =
if Boolean.not bool then
base.bug (Generic.failure "Fatal Issue Encountered" bool)
else 100,can be translated into a
Setby wrapping the map in
map = Map.fromList [(1, ()), (2, ()), (3, ())] internal.Set map⧨internal.Set (internal.Bin 3 2 () (internal.Bin 1 1 () internal.Tip internal.Tip) (internal.Bin 1 3 () internal.Tip internal.Tip))
Setvalue enables the efficient functions like
Set.unionthat you might be familiar with from other languages.
You can explore these types and more of other collection apisin the
Eager evaluation means that values and expressions are evaluated as soon as they are bound to a variable, as opposed to when they are called.
Found on the right hand side of the equals sign in a type declaration, a data constructor describes how to construct a value of some type.
For example, the
Optionaltype has two data constructors,