2017-11-28 6 views
1
다음 코드 패턴과 일치하는 방법을 무엇

...복잡한/다중 라인 hlint 규칙을 작성하는 방법은 무엇입니까?

do 
    x <- createModel a b 
    case x of 
    Left e -> throwM $ ValidationErrors e 
    Right y -> ... 

... 다음과 같은 교체를 제안한다

withThrow $ createModel a b 

I 시도한 다음,하지만이 작동하지 않습니다

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

성공하더라도, 매우 구체적으로 보입니다. – dfeuer

+1

너무 구체적으로 보인다고 동의합니다. 당신이 찾고있는 패턴은'Left' 브랜치에서'throwM'과'Either' 패턴 매칭이라고 생각합니다. 또한'ValidTerow'가'ValidationErrors'에서만 작동한다면'withThrow'도 특이한 것처럼 보입니다. – Cirdec

+2

별개로, 당신은 케이스 표현의 일부 *와 일치하는 행운이 없을 것이라고 생각합니다. 어떻게 든 다른 지점을 언급해야 할 것 같습니다. 하지만 나는 HLint 규칙을 작성한 적이 없으므로 확실하지 않습니다. – dfeuer

답변

1

문제는 사용자가 정의하려는 규칙이 정말 문을 기반 반면 HLint 매칭이 표현을 기반으로한다는 것입니다 - 당신은 두 문장의 anywher를 일치시킬 인접한 do에 있습니다. HLint가이를 수정하기 위해 가능할 수 있습니다. 유용하다고 생각하시면 raise an HLint issue으로 연락하십시오.