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.
Lists
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 isList
,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[]
or withdata.List.empty
.
For the curious, the documentation forList
describes the underlying data structure and details many of the common operations you might perform onList
s.
Maps
TheMap
type is Unison's way of mapping unique keys to values.
You can create a map with a single object withMap.singleton 1 "a"
where1
is the key and"a"
is the value associated with that key.
Currently Unison does not have specialMap
construction syntax so one easy way to create a multi item map is from aList
of tuples
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 aMap
might look more complicated than it really is.internal.Bin
andinternal.Tip
are just thedata constructorsforMap
.You'll likely be working with Maps through functions in the base library instead of dealing with these terms directly. Check out a fewMap
manipulation functions withfind base.Map
in the UCM.
Issue thedocs Map
command in the UCM to read theMap
documentation itself.
Sets
AMap
whose 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 aSet
by wrapping the map inSet
'sdata constructor.
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))
Creating aSet
value enables the efficient functions likeSet.contains
andSet.union
that you might be familiar with from other languages.
You can explore these types and more of other collection apisin thebase
library.