The main body of a skam protocol file is a set of targets. A target (also known as skolem) has a name and arguments, and a set of tag-value pairs beneath it. Each tag value pair occupies a single line. If you have long tag-value pairs and you wish to avoid long lines, use the backslash \ character to indicate line concatenation.
Target arguments are typically variables, indicated with a leading uppercase character. Target arguments can also be atoms, or strings. [TODO: SYNTAX RULES FOR ATOMS]. Example atoms may be lowercase words, or a string enclosed in single quotes.
Target arguments can also be target patterns themselves; this can be useful for providing a typing system.
Consider the case where you need to use certain parameters when executing a command depending on the type of input. One such case is the NCBI formatdb command, which needs to be executed on a FastaFile prior to searching that file via NCBI blast. There are a number of ways of achieving this. One way is to use target patterns as arguments, proving a type system.
formatdb(pepdb(FastaFile)) req: FastaFile run: formatdb -i FastaFile -p 'T' comment: 'index protein database ready for NCBI blast' formatdb(nucdb(FastaFile)) req: FastaFile run: formatdb -i FastaFile -p 'F' comment: 'index nucleotide database ready for NCBI blast' blastx(Seq,FastaFile) req: formatdb(pepdb(FastaFile)) srun: blastall -p blastx -i Seq -d FastaFile comment: 'we assume the FastaFile is peptide if the user requests blastx' blastn(Seq,FastaFile) req: formatdb(nucdb(FastaFile)) srun: blastall -p blastn -i Seq -d FastaFile comment: 'we assume the FastaFile is nucleotide if the user requests blastx'Note that we do not need to provide an explicit target specification for pepdb(X) and nucdb(X) - these serve as types [TODO: TYPE SYSTEM; INHERITANCE]