code: function checkValue(typeVarMap, index, k, x) {
          var propPath = [k];
          var t = expType.types[k];
          return (
            t.type === VARIABLE ?
              Z.chain (
                function(typeVarMap) {
                  return isEmpty (typeVarMap[t.name].types) ?
                    Left (function() {
                      return typeVarConstraintViolation (
                        env,
                        typeInfo,
                        index,
                        propPath,
                        typeVarMap[t.name].valuesByPath
                      );
                    }) :
                    Right (typeVarMap);
                },
                Right (updateTypeVarMap (env,
                                         typeVarMap,
                                         t,
                                         index,
                                         propPath,
                                         [x]))
              ) :
            // else
              Z.map (
                function(r) { return r.typeVarMap; },
                satisfactoryTypes (env,
                                   typeInfo,
                                   typeVarMap,
                                   t,
                                   index,
                                   propPath,
                                   [x])
              )
          );
        }
docs: checkValue :: (TypeVarMap, Integer, String, a) -> Either (() -> Error) TypeVarMap