                 }
                 try expect(token: .rparen)
             }
+            // TODO: parse built-in functions into native Expression enum cases, not generic .call(_)s
             return .call(kw, args)
         default:
             throw parseError("Expected built-in function call but found \(t)")

        return Query(form: .ask, algebra: ggp, dataset: dataset)
    }

    private mutating func parseDatasetClauses() throws -> Dataset? { // TODO: figure out the return type here
        var named = [Term]()
        var unnamed = [Term]()
        while try attempt(token: .keyword("FROM")) {

        } else {
            let t = try peekExpectedToken()
            if case .lang(let lang) = t {
                let _ = try nextExpectedToken()
                return .bound(Term(value: value, type: .language(lang)))
            }
        }
