+Con: wellicht kut met code generatie, wie weet.
+
+---
+Functies en variabelen delen 1 namespace.
+Dat is met het oog op hogere orde functies, dan kan een parameter voor een functie een andere
+functie zijn, of een variabele en als die 2 aparte namespaces hebben is dat moeilijk onduidelijk /
+praktisch onmogelijke met type inteference
+
+
+---
+Functies kunnen voor correct typechecken alleen functies gebruiken die DAARNA
+gedefinieerd zijn
+
+—
+
+Globaal gedefinieerde dingen worden als constanten beschouwd. Enkel in functies gedefinieerde vars zijn mutable. Twee redenen: 1 we behouden onze programmeurs voor het gebruik van globale state, want dat is de wortel van het kwaad. Daarnaast past het goed bij dat _alles_ op top level een functie is. Als je zegt i = next x; en x wijzigt tussendoor en je checkt dan weer i dan wordt i opnieuw geevalueerd en dat levert dan dus een andere waarde op, en dat wil je niet.
+
+
+— mbt code generation
+—-
+Globals zijn bestaan niet, ondingen. Lokale variabelen komen gewoon op de stack
+te staan in volgorde van declaratie.
+
+Int, Char, Bool worden gewoon normaal opgeslagen met hun waarde
+Tuple wordt opgeslagen dmv twee pointers naar de heap
+List wordt opgeslagen dmv een pointer, als die 0 is dan is het het einde. Als
+ het een plek op de heap is dan wijst die plek naar de waarde, de volgende
+ plek wijst dan naar de tail.
+Incomplete functies sla je op dmv heap pointer, plek van de pointer is het
+ functieadres, plekken erna zijn de argumenten. Dit is poor-mans higher
+ order functions. Als we het pro willen doen is dat niet in de scope van het
+ project.(closure, lambda's nodig etc)
+
+Functies callen gebeurt door eerst de oude frame pointer op de stack te duwen,
+dan omgekeert de argumenten van de functie. Bij afbraak herstel je gewoon de
+stack pointer naar de waarde onder het laatste argument.
+