Gos and No-Gos
Gos
- Expression based
 
- Unified type and term language, a type signature is any expression that returns a 
Type
This probably means we have to the general style of X : a -> b type definitions 
- Partial application friendly syntax
Even though this language is going to be more systems oriented, it's still going to have functional semantics. Like most other functional programming languages, whitespace should act like the function application operator.
 
NoGos
- Indentation Sensitivity
To play this one safe for now, I'm just going to require all logical-lines to be semi-colon terminated. We'll likely want to look into ways to reduce the semi-colonitis later
 
Function Definitions
Pattern matching definition:
def add_to_end(arg1: List t -> arg2: t -> List t) matching arg1, arg2 {
  [], y => [y];
  x :: xs, y => x :: add_to_end xs;
}
matching should also be usable outside a def to declare a pattern-matching anonymous function
Single body definition:
def add_nats(arg1: Nat -> arg2: Nat -> Nat) taking arg1, arg2 => 
  arg1 + arg2;
taking should behave entirely as shorthand for a matching function with only one block, and work everywhere a matching would work
main :: IO ()
main = undefined