anchor.diff:        else
           val) (head defs).value defs;
   
  -  # Extracts values of all "value" keys of the given list
  -  #
  -  # Examples:
  -  #   getValues [ { value = 1; } { value = 2; } ] // => [ 1 2 ]
  -  #   getValues [ ]                               // => [ ]
  +  /* Extracts values of all "value" keys of the given list.
  +
  +     Type: getValues :: [ { value :: a } ] -> [a]
  +
  +     Example:
  +       getValues [ { value = 1; } { value = 2; } ] // => [ 1 2 ]
  +       getValues [ ]                               // => [ ]
  +  */
     getValues = map (x: x.value);
   
  -  # Extracts values of all "file" keys of the given list
  -  #
  -  # Examples:
  -  #   getFiles [ { file = "file1"; } { file = "file2"; } ] // => [ "file1" "file2" ]
  -  #   getFiles [ ]                                         // => [ ]
  +  /* Extracts values of all "file" keys of the given list
  +
  +     Type: getFiles :: [ { file :: a } ] -> [a]
  +
  +     Example:
  +       getFiles [ { file = "file1"; } { file = "file2"; } ] // => [ "file1" "file2" ]
  +       getFiles [ ]                                         // => [ ]
  +  */
     getFiles = map (x: x.file);
   
     # Generate documentation template from the list of option declaration like
  
positive.code: 
  rec {
  
    # Returns true when the given argument is an option
    #
    # Examples:
    #   isOption 1             // => false
    #   isOption (mkOption {}) // => true
    isOption = lib.isType "option";
  
    # Creates an Option attribute set. mkOption accepts an attribute set with the following keys:
    #
    #  default:     Default value used when no definition is given in the configuration.
    #  defaultText: Textual representation of the default, for in the manual.
    #  example:     Example value used in the manual.
    #  description: String describing the option.
    #  type:        Option type, providing type-checking and value merging.
    #  apply:       Function that converts the option value to something else.
    #  internal:    Whether the option is for NixOS developers only.
    #  visible:     Whether the option shows up in the manual.
    #  readOnly:    Whether the option can be set only once
    #  options:     Obsolete, used by types.optionSet.
    #
    # All keys default to `null` when not given.
    #
    # Examples:
    #   mkOption { }  // => { _type = "option"; }
    #   mkOption { defaultText = "foo"; } // => { _type = "option"; defaultText = "foo"; }
    mkOption =
      { default ? null # Default value used when no definition is given in the configuration.
      , defaultText ? null # Textual representation of the default, for in the manual.
      , example ? null # Example value used in the manual.
      , description ? null # String describing the option.
      , relatedPackages ? null # Related packages used in the manual (see `genRelatedPackages` in ../nixos/doc/manual/default.nix).
      , type ? null # Option type, providing type-checking and value merging.
      , apply ? null # Function that converts the option value to something else.
      , internal ? null # Whether the option is for NixOS developers only.
      , visible ? null # Whether the option shows up in the manual.
      , readOnly ? null # Whether the option can be set only once
      , options ? null # Obsolete, used by types.optionSet.
      } @ attrs:
      attrs // { _type = "option"; };
  
    # Creates a Option attribute set for a boolean value option i.e an option to be toggled on or off:
    #
    # Examples:
    #   mkEnableOption "foo" // => { _type = "option"; default = false; description = "Whether to enable foo."; example = true; type = { ... }; }
    mkEnableOption = name: mkOption {
      default = false;
      example = true;
      description = "Whether to enable ${name}.";
      type = lib.types.bool;
    };
  
    # This option accept anything, but it does not produce any result.  This
    # is useful for sharing a module across different module sets without
    # having to implement similar features as long as the value of the options
    # are not expected.
    mkSinkUndeclaredOptions = attrs: mkOption ({
      internal = true;
      visible = false;
  
negative.code: 
  
    /* This function recursively removes all derivation attributes from
       `x` except for the `name` attribute.
  
       This is to make the generation of `options.xml` much more
       efficient: the XML representation of derivations is very large
       (on the order of megabytes) and is not actually used by the
       manual generator.
    */
    scrubOptionValue = x:
      if isDerivation x then
        { type = "derivation"; drvPath = x.name; outPath = x.name; name = x.name; }
  