Languages shape how we think and observe the world; I have repeatedly experienced this in my life. This is especially true for programmers — the languages we use define what we can express, and Daml’s primitives express something unusual.

Most programming languages have a set of the most common types; integers, floating points, characters, strings, times and dates. And Daml has those too, but adds one that is novel: the Party type.

The Daml Party type represents an identity on the ledger. It is an opaque type, and the runtime provides very few functions for interacting with a Party directly. Nonetheless, you can do standard things such as compare Party’s, put them into data structures or pass them to functions. So what’s the big deal?

Consider when the now quintessential introductory programming example:

printf("hello, world\n");

is presented to us, we never think to ask who is running main?” We know the answer: we are running main and this "world" is a generic stand-in for everyone. Daml is different in that regard. The byproduct of execution captures the who. It is inseparable.

You’ve probably heard of Daml because of the Canton Network and you have an association that it is the smart contract language used on that blockchain. While the focus on blockchain is useful, it won’t necessarily get you to think in Daml. To do that, you have to embrace the uniqueness of the Party type. “Alice” the Party is different from some "Alice" string or a VARCHAR in a database schema, nor is it a record of information about Alice, from her date of birth to sister-in-law’s maiden name. To take an action on the ledger, you need the authorization of a Party. What would motivate a Party to give you that authorization? They want the asset that results from it.

template Token
  with
    issuer : Party
    owner : Party
    amount : Decimal
  where
    signatory issuer, owner

When you think about Party’s, (identities, peoples, corporations, agents), the who, you are forced to think about the why.

Consider the billions of dollars spent on software development over the past decades on technology waves such as mobile, e-commerce, and social networking (which is nominally about connecting people), that tried to aggregate and cross-reference data about users. The languages and databases only let programmers treat the end user as subject, an id, an integer, a uuid. Not as an identity with rights.