在定义范围内,Haskell List Comp类型错误为负

时间:2019-03-02 22:14:55

标签: haskell integer typeerror

通过较早的考试,我复制了这段代码,并试图使其正常工作。

$(".option input[type=radio]").change(function() {
  reload_filterstring(this);
});

$(".option input[type=checkbox]").change(function() {
  reload_filterstring(this);
});

function reload_filterstring(that) {
  var finalFilterQuery = {};

  var currentEl = "";

  (filterType = $this.attr("data-filter-type")),
  ($options = $this.find("ul.options input")),
  (query = $this.find('input[name="query"]')),
  (finalQuery = $('input[name="finalQuery"]')),
  (filterData = []),
  (filterQuery = null);

//  console.log(filterName);

currentVal = [];

$options.each(function() {
  if ($(this).prop("checked") == true) {
    currentVal.push($(this).attr("id"));
  }
});

finalFilterQuery[filterName] = currentVal.join("|");
  }

  // console.log(finalFilterQuery);
  var str = "";
  for (var key in finalFilterQuery) {
if (finalFilterQuery.hasOwnProperty(key)) {
  if (str != "") {
    str += ",";
  }
  str += key + "=" + finalFilterQuery[key];
}
  }
  console.log(str);
}

现在使用类型声明或不使用类型声明,都会出现错误:

rems :: Integer -> [(Integer ,Integer )]
rems n = [(i, n `mod` i) | i <- [2 ..(n−1)]]

我能够通过在where子句中计算n-1来解决此问题,但并没有真正弄清为什么这是解决方法。我当然知道Haskell中是什么整数。

Variable not in scope: (−) :: Integer -> Integer -> Integer
ghc version 8.6.3

有人可以向我解释为什么这种看似无效的变化可以解决该错误,还有其他方法吗?

1 个答案:

答案 0 :(得分:5)

这是一个简单的印刷错误。您的不是连字符(Haskell期望),它是Unicode负号字符,这是不同的。您的来源必须已自动将前者转换为后者。只需将其替换为连字符(使用键盘输入)即可。