If you have a question about tasl that isn't covered here, or if you just want to say hi, feel free to start a thread in the Underlay category on our discourse forum.

tasl's simplest value proposition is that it offers a lightweight, accessible way to model data using algebraic data types.

In the longer term, we hope that tasl can provide a more structured foundation for representing data that can support kinds of uses that aren't possible today. In particular, we're interested in exploring ways to represent *partial correspondences* between datasets in situations where the underlying ontologies do not perfectly align, but still relate in some way. We ultimately expect that tasl's explicit concept of *elements* will be important for expressing these kind of correspondences.

tasl is a part of the Underlay project, a collaboration between the Knowledge Futures Group and Protocol Labs Research.

Some discussion threads on tasl's early development can be found here, here and here.

xkcd rules apply:

For those of us pedantic enough to want a rule, here it is: The preferred form is "xkcd", all lower-case. In formal contexts where a lowercase word shouldn't start a sentence, "XKCD" is an okay alternative. "Xkcd" is frowned upon.

Use "tasl" whenever you can, and "TASL" when you absolutely need to.

In math, an *algebra* is any little system that starts with a some initial things, and has two different ways of combining things to get more things.

In the algebra that's taught in high school, the initial things are numbers and variables, and the two ways of combining them are addition and multiplication. In that context, an "algebraic expression" is something like `(x * 4) + (y * (x + 1))`

- a composite thing built up from some initial terms and assembled using `*`

and `+`

.

The algebra that tasl deals with is one where the expressions are *types*. Here, instead of numbers and variables, our initial terms are primitive types like `string`

and `date`

, and our two ways of combining them are called *product* and *coproduct*. These are known as algebraic data types.

This is also a distinction in RDF - Named Nodes are different than Literals. In tasl, we wanted a sharp distinction between values that are *identifiers* and values that just represent themselves. The URI type is supposed to indicate that the values can be used to interface with other systems. In the binary format, they're serialized the same way, but other tools like tasl-native databases may want to index them differently.