Chapter 7. More Advanced Features of Opa
Before we dive into developing Birdy, you need to learn few more things about Opa. In this chapter, we will discuss more complex types, which will help you deal with more complex data that you will encounter in this part of the book.
Learning More About Types
You learned about primitive values (int
, float
, string
) in
Primitive Values and about records in Records.
Now it is time to extend your type arsenal.
Variant Types
Variant types, as the name suggests, allow you to express values that can take several different variants. Probably the simplest such type is a boolean value, which is defined in Opa as follows:
type
bool=
{
false}
or
{
true}
The variants are separated with the or
keyword and the variants
themselves are just regular record types. Lack of a type for a given
field implies it is of type void
(which we covered in Event Handlers), so the preceding code can also be written as follows:
type
bool=
{
void false}
or
{
void true}
Such void
-typed fields make little sense in regular records, as
the field value carries no information. However, in variant types
they make perfect sense, as their presence is important
and differentiates between variants.
In this simple form, with all variants having just one field of type
void
, those types correspond to enumeration types, as you may
know from other programming languages. Here is another example
from the standard Opa library:
type
Date
.
weekday=
{
monday}
or
{
tuesday}
or
{
wednesday}
or
{
thursday}
or
{
Get Opa: Up and Running now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.