# Read actual constructor attributes as comparison data. Their values AND # dependency contexts remain visible; none is substituted for a build input. derivation: let fields = [ "name" "system" "src" "stdenv" "nativeBuildInputs" "buildInputs" "propagatedBuildInputs" "propagatedNativeBuildInputs" "configurePhase" "buildPhase" "checkPhase" "installPhase" "doCheck" "strictDeps" "outputs" "__structuredAttrs" ]; selected = builtins.intersectAttrs (builtins.listToAttrs ( map (name: { inherit name; value = null; }) fields )) derivation; in builtins.mapAttrs (_: value: { type = builtins.typeOf value; value = builtins.unsafeDiscardStringContext (toString value); context = builtins.getContext (toString value); }) selected