Hopefully a fixed version of Refactor: introduce isType reducing redundancy.

Coding-by-sed wasn't a good idea :(
This commit is contained in:
Evgeny Egorochkin 2013-03-13 15:05:30 +01:00
parent 6c97e9ef72
commit 993deb1a4a
4 changed files with 17 additions and 16 deletions

View file

@ -11,10 +11,10 @@ with import ./properties.nix;
rec {
inherit (lib) typeOf;
inherit (lib) isType;
isOption = attrs: (typeOf attrs) == "option";
isOption = isType "option";
mkOption = attrs: attrs // {
_type = "option";
# name (this is the name of the attributem it is automatically generated by the traversal)
@ -190,7 +190,7 @@ rec {
defValue = builtins.getAttr defName defs;
optValue = builtins.getAttr defName opts;
in
if typeOf defValue == "option"
if isOption defValue
then
# `defValue' is an option.
if hasAttr defName opts

View file

@ -11,13 +11,13 @@ with import ./attrsets.nix;
rec {
inherit (lib) typeOf;
inherit (lib) isType;
# Tell that nothing is defined. When properties are evaluated, this type
# is used to remove an entry. Thus if your property evaluation semantic
# implies that you have to mute the content of an attribute, then your
# property should produce this value.
isNotdef = attrs: (typeOf attrs) == "notdef";
isNotdef = isType "notdef";
mkNotdef = {_type = "notdef";};
# General property type, it has a property attribute and a content
@ -32,7 +32,7 @@ rec {
# - onGlobalDelay: run on all copied properties.
# - onEval: run on an evaluated property.
# - onGlobalEval: run on a list of property stack on top of their values.
isProperty = attrs: (typeOf attrs) == "property";
isProperty = isType "property";
mkProperty = p@{property, content, ...}: p // {
_type = "property";
};
@ -187,7 +187,7 @@ rec {
# and interpreted by the underlying system using properties (modules).
# Create a "Merge" property which only contains a condition.
isMerge = attrs: (typeOf attrs) == "merge";
isMerge = isType "merge";
mkMerge = content: mkProperty {
property = {
_type = "merge";
@ -204,7 +204,7 @@ rec {
# is ignore.
# Create a "If" property which only contains a condition.
isIf = attrs: (typeOf attrs) == "if";
isIf = isType "if";
mkIf = condition: content: mkProperty {
property = {
_type = "if";
@ -271,7 +271,7 @@ rec {
# priorities between values. The default priority is 100. The lowest
# priorities are kept. The template argument must reproduce the same
# attribute set hierarchy to override leaves of the hierarchy.
isOverride = attrs: (typeOf attrs) == "override";
isOverride = isType "override";
mkOverrideTemplate = priority: template: content: mkProperty {
property = {
_type = "override";
@ -371,7 +371,7 @@ rec {
# of the list used by the merge function. And the highest ranked
# definition would be the last. Definitions which does not have any rank
# value have the default rank of 100.
isOrder = attrs: (typeOf attrs) == "order";
isOrder = isType "order";
mkOrder = rank: content: mkProperty {
property = {
_type = "order";
@ -434,7 +434,7 @@ rec {
# properties on top of the option definition is nice for user manipulation
# but require to check if the content of the property is not another
# property. Such testing implies to verify if this is an attribute set
# and if it possess the type 'property'. (see isProperty & typeOf)
# and if it possess the type 'property'. (see isProperty & typeOf/isType)
#
# To avoid strict evaluation of option definitions, 'mkFixStrictness' is
# introduced. This property protects an option definition by replacing

View file

@ -15,7 +15,7 @@ in
rec {
isSignificantByte = x: typeOf x == "significant-byte";
isSignificantByte = isType "significant-byte";
significantBytes = setTypes "significant-byte" {
bigEndian = {};
littleEndian = {};
@ -37,7 +37,7 @@ rec {
};
isExecFormat = x: typeOf x == "exec-format";
isExecFormat = isType "exec-format";
execFormats = setTypes "exec-format" {
aout = {}; # a.out
elf = {};
@ -47,7 +47,7 @@ rec {
};
isKernel = x: typeOf x == "kernel";
isKernel = isType "kernel";
kernels = with execFormats;
setTypes "kernel" {
cygwin = { execFormat = pe; };
@ -61,7 +61,7 @@ rec {
};
isArchitecture = x: typeOf x == "architecture";
isArchitecture = isType "architecture";
architectures = setTypes "architecture" {
apple = {};
pc = {};

View file

@ -10,6 +10,7 @@ with import ./trivial.nix;
rec {
isType = type: x: (x._type or "") == type;
hasType = x: isAttrs x && x ? _type;
typeOf = x: x._type or "";
@ -26,7 +27,7 @@ rec {
# hasOptions (boolean: whatever this option contains an option set)
# delayOnGlobalEval (boolean: should properties go through the evaluation of this option)
# docPath (path concatenated to the option name contained in the option set)
isOptionType = attrs: typeOf attrs == "option-type";
isOptionType = isType "option-type";
mkOptionType =
{ name
, check ? (x: true)