validatePropKeys = (prop, propName) =>
    Immutable.List.of("value", "type", "category")
      .traverse(
        Either.of,
        propKey =>
          prop.has(propKey)
            ? Either.Right()
            : Either.Left(
                `Property "${propName}" contained no "${propKey}" key`
              )
      )
      .map(constant(prop))
Validate that a prop has all required keys