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"}