programing

"|"는 무엇입니까?

yoursource 2021. 1. 15. 19:53
반응형

"|"는 무엇입니까? Haskell 클래스 정의에서?


다음과 같은 클래스 정의에서 "| m-> w"부분이 무엇을 의미하는지 알 수 없습니다.

class (Monoid w, Monad m) => MonadWriter w m | m -> w

이것이 클래스 정의에 어떤 추가 정보를 추가합니까?


수직 막대는 의미가없는 구문 구분 기호로 다중 매개 변수 유형 클래스에 기능적 종속성도입 하는 데 사용 되므로 기술적으로 |는 아무 의미도 없습니다. 아마도 기능에 |대한 패턴 가드동일한 기호를 사용하는 시각적 비유로 선택되었을 것입니다.

기능적 종속성 자체에 관한 한, x -> y"유형 매개 변수가 유형 매개 변수를 x고유하게 결정합니다 "로 읽으십시오 y. 즉, 아는 x것만으로도 올바른 인스턴스를 찾을 수 있습니다. 특히 다른 GHC 확장을 활성화하면 더 많은 문제가 발생하지만 대부분의 경우 걱정할 필요가 없습니다.

반대로, 기능적 종속성없이 다중 매개 변수 유형 클래스의 인스턴스를 선택하려면 모든 유형 매개 변수를 알아야합니다. 전형적인 예는 하나의 매개 변수가 컨테이너 유형이고 다른 하나는 포함 된 요소의 유형입니다. "concatenate"또는 "isEmpty"와 같은 함수는 요소 유형을 언급 할 필요가없고 컨테이너 유형 만 언급 할 필요가 없으므로 모호합니다.

또한 고유 한 유형 클래스를 작성 하는 경우에는 결국 함수 종속성을 대체 할 수있는 새로운 접근 방식 인 유형 family를 대신 사용 하는 것이 좋습니다. 대략적으로 말하면 유형 패밀리를 사용하면 오버로드 된 함수뿐만 아니라 인스턴스 내에 오버로드 된 유형 정의 를 작성할 수 있습니다 .


기능적 종속성을 지정합니다 .

참조 URL : https://stackoverflow.com/questions/2675655/whats-the-for-in-a-haskell-class-definition

반응형