             let silent = try attempt(token: .keyword("SILENT"))
             let node = try parseVarOrIRI()
             let ggp = try parseGroupGraphPattern()
-            fatalError("SERVICE algebra is unimplemented")
+            fatalError("implement SERVICE \(node) \(ggp) \(silent)")
 //            return .finished(.service(node, ggp, silent))
         } else if case .keyword("FILTER") = t {
             try expect(token: t)

                fatalError("DISTINCT aggregation is unimplemented")
            }
            let expr = try parseNonAggregatingExpression()
            fatalError("MIN aggregate is unimplemented")
            try expect(token: .rparen)
        case "MAX":
            try expect(token: .lparen)
            if try attempt(token: .keyword("DISTINCT")) {
                fatalError("DISTINCT aggregation is unimplemented")
            }
            let expr = try parseNonAggregatingExpression()
            fatalError("MAX aggregate is unimplemented")
            try expect(token: .rparen)
        case "AVG":
            try expect(token: .lparen)
            if try attempt(token: .keyword("DISTINCT")) {

                algebra = .extend(algebra, expr, name)
            } else {
                guard let c = freshCounter.next() else { fatalError("No fresh variable available") }
                let name = ".group-\(c)"
                algebra = .extend(algebra, expr, name)
                node = .variable(name, binding: true)
            }
