"불가능한"경우에도 하스켈에서 철저한 패턴 매칭을 항상하는 것이 좋습니까?"불가능한"경우에도 하스켈에서 철저한 패턴 매칭을 항상하는 것이 좋습니까?
예를 들어, 다음 코드에서 foldr의 "누적 기"에 패턴 일치가 있습니다. 누적 기의 내용을 완벽하게 제어합니다. 생성하기 때문에 (입력으로 전달되지 않고 내 함수 내에서 생성됩니다). 따라서 특정 패턴이 절대로 일치해서는 안된다는 것을 알고 있습니다. "Pattern match (es) is non-exhaustive"오류가 발생하지 않도록 노력한다면 패턴 일치를 배치하여 "이 패턴은 발생하지 않아야합니다."라는 메시지와 함께 오류가 발생합니다. C#의 주장과 매우 비슷합니다. 나는 그곳에서 할 일을 생각할 수 없다.
이 상황에서 어떤 연습을 권하고 싶습니까? 그 이유는 무엇입니까?
gb_groupBy p input = foldr step [] input
where
step item acc = case acc of
[] -> [[item]]
((x:xs):ys) -> if p x item
then (item:x:xs):ys
else [item]:acc
(인터프리터에 의해보고) 일치하지 않는 패턴은 다음과 같습니다 :
경고 : 패턴 일치 (들) 경우의 대안 비 철저한 있습니다 : 패턴 여기
코드입니다 일치하지 않음 : [] : _
여기서 귀찮은 것은 경고 메시지를 없애기 위해 덜 유용한 런타임 오류 메시지를 넣는 경우가 많다는 것입니다. 누락 된 사례를 인정하고 싶지만 기본 런타임 오류 텍스트 (파일/행 번호를 가리킴)를 사용할 수 있습니다. –
그것은 좋은 지적입니다. 나는 현재 그렇게 할 수있는 방법이 없다고 생각한다. 너무 나빴어. –
또한보십시오 http://stackoverflow.com/questions/1882334 – sdcvvc