         }
       }
     } else {
-      return FunctionCallExpr(calledExpression: IdentifierExpr(String("\(type(of: self))"))) {
+      return FunctionCallExpr(callee: "\(type(of: self))") {
         for child in mirror.children {
           let label = child.label!
           let value = child.value as! SyntaxProtocol?

  private var debugInitCallExpr: ExprSyntaxProtocol {
    let mirror = Mirror(reflecting: self)
    if self.isCollection {
      return FunctionCallExpr(calledExpression: IdentifierExpr(String("\(type(of: self))"))) {
        TupleExprElement(
          expression: ArrayExpr() {
            for child in mirror.children {

    let (label, value) = Mirror(reflecting: self).children.first!
    switch value {
    case let value as String:
      return FunctionCallExpr(callee: ".\(label!)") {
        TupleExprElement(expression: StringLiteralExpr(content: value))
      }
    case let value as Int:
      return FunctionCallExpr(callee: ".\(label!)") {
        TupleExprElement(expression: IntegerLiteralExpr(value))
      }
    default:
