I found some newScope are defined like extra: callPackageWith (someScope // extra)
.
I think makeScope is make a attrset working with callPackage. A callPackage is usually by callPackageWith, so why not using a attrset and defining newScope in makeScope? That can let us ignore how to define a newScope.