# 10K Genes/10K MoClo/Type Syntax

The 10K Genes Type Syntax is a way to define parts that are not primitives (though primitives can also be defined in this manner).

# Basics

Because of the nature of recursive GoldenGate, it is desirable to have a standard way to pass parts between programs and people so that every party can understand exactly what flanks the DNA part and the providence of that part. These definitions are based off of Lisp lists, or more specially, S-expressions. The "part_type" list has exactly 4 elements, which can be themselves more lists.

'(Type, Prefix, Suffix, History)


For example,

'(CDS, BsaI_AATG, BsaI_GCTT, ())


is a CDS primitive without a SapI site and without history tracking.

### Defining Multiple enzyme sites

Multiple enzyme sites can occur in any prefix or suffix. To do this, each enzyme should be in a list in the order the cut site appears it appears. For example, an iGem part -

'(Composite, (EcoRI, NotI, XbaI), (SpeI, NotI, PstI) ())


It is important to note, that when using a Type IIS enzyme like BsaI or BsmBI, you are still required to explicitly state the cut site after the underscore.

## Types

There are several types, each individually important.

Promoter
RBS
CDS
Terminator
Tag
Other
Composite
Vector


It is important to use the proper type when defining a piece of DNA for automated organizational procedures later.

## Vector definitions

Vectors are unique in that enzymes and their respective cut sites are flipped. This is to represent that their GoldenGate sites are in reverse orientation.

'(Vector AATG_BsaI, GCTT_BsaI, ())


Every build MUST have a vector included in it.

Linkers are important to include when tracking history of objects (which is expanded upon below). Linkers are quite simple primitives. There are linker prefixes and suffixes, which are the first element of the primitive list. The second is the site that they cut. A build usually consists of 2 linkers. Linkers

'(Linker-PREFIX, BsaI_AATG, ())


## Builds

When building an object from several other objects, one should always build this up from the *sequence* rather than the type. For example, say you had 2 parts.

'(Vector, AATG_BsaI, GCTT_BsaI, ())
'(Other, (BsaI_AATG, BtgZI


### History Tracking

History can be fully tracked. "History" is defined as such -

(Recent action (Preceding action))


And is recursive, meaning that you may have -

(Most recent action (action (action (action))))


### Action

An action is a list that includes the enzyme used as well as what it was used on. The most primitive action is simply a list like in "Basics" above.

(BsaI-AATG, BsaI-GCTT, ())


However, these primitives can chain together in unique ways

(enzyme (id (action)) (id (action)) (id (action)))