Literate Silver

In addition to normal .sv files, Silver code will also be found when written in .sv.md files. These files are parsed as Markdown, and fenced code blocks with an info string of silver will be concatenated, with the result then being compiled.

For example, a file could contain:

## Hello World Examples

We can see a comparison between the "Hello World" programs written in Silver and Forth.

```silver
function main 
IOVal<Integer> ::= args::[String] ioIn::IO
{
  return ioval(print("Hello, world!", ioIn), 0);
}
```

```forth
." Hello, world!"
```

Only the Silver code here would be compiled.

There’s also no requirement that a code block lines up with Silver declarations:

As we can see, the type signatures in Silver declarations are designed to look like EBNF rules.

```silver
function main 
IOVal<Integer> ::= args::[String] ioIn::IO
```

The bodies, on the other hand, look kinda sorta Javay -- this is probably fine for functions, but can be confusing in productions!

```silver
{
  return ioval(print("Hello, world!", ioIn), 0);
}
```