Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 如何编写复杂/多行hlint规则?_Haskell_Hlint - Fatal编程技术网

Haskell 如何编写复杂/多行hlint规则?

Haskell 如何编写复杂/多行hlint规则?,haskell,hlint,Haskell,Hlint,如何匹配以下代码模式 do x <- createModel a b case x of Left e -> throwM $ ValidationErrors e Right y -> ... 我尝试了以下方法,但无效: hint: {lhs: "do {x <- createModel v w; case x of Left e -> throwM $ ValidationErrors e}", rhs: "withThrow $ c

如何匹配以下代码模式

do 
  x <- createModel a b
  case x of
    Left e -> throwM $ ValidationErrors e
    Right y -> ...
我尝试了以下方法,但无效:

hint: {lhs: "do {x <- createModel v w; case x of Left e -> throwM $ ValidationErrors e}", rhs: "withThrow $ createModel v w"}
提示:{lhs:{x throwM$ValidationErrors e}”,rhs:“withThrow$createModel v w”}

问题在于HLint匹配是基于表达式的,而您试图定义的规则实际上是基于语句的-您希望在
do
中相邻的任意位置匹配这两条语句。HLint可能会被修改以实现这一点,您认为这会很有用,请。

即使您成功了,这似乎非常具体。我同意这似乎太具体了。我认为您要查找的模式是
左分支中的
throwM
上的模式匹配。另外,
withThrow
似乎也很具体,如果它只适用于
ValidationErrors
。另外,我认为您不会有太多运气匹配case表达式的一部分。我想你至少应该提到另一个分支。但我从未编写过HLint规则,所以我不确定。它很具体,因为它只与我们的项目相关。不作为一般hlint规则发布。让我尝试匹配大小写表达式的左/右分支。
hint: {lhs: "do {x <- createModel v w; case x of Left e -> throwM $ ValidationErrors e}", rhs: "withThrow $ createModel v w"}