     let expression = Deferred()
 
     let body = skip >>> expression >>> skip
-    let params = lparen >>> identifier >>> rparen
+    let params = lparen >>> identifier.some.maybe >>> rparen
     let function = (lparen >>> def >>> identifier.tag("name") >>> params.tag("params") >>> body.tag("body") >>> rparen).tag("function")
 
-    let argument = skip >>> expression >>> skip
-    let call = (lparen >>> identifier.tag("name") >>> argument.tag("argument") >>> rparen).tag("call")
+    let argument = skip >>> expression.some.maybe >>> skip
+    let call = (lparen >>> identifier.tag("name") >>> argument.tag("arguments") >>> rparen).tag("call")
 
     expression.parser = literal | variable | call
 

func makeIotaTransformer() -> IotaTransformer {

    let transformer = IotaTransformer()

    transformer.rule(["numeral": .simple("n")]) {
        let n = try $0.raw("n")

func makeIotaParser() -> ParserProtocol {

    /*
     (def head (a b) a)
     (head 9 5)
     */

    let space = " \t\n".match
