Haskell은 결과 유형에만 함수 화살표를 적용합니까?
-
13-12-2019 - |
문제
Haskell에서 함수 화살표 유형 생성자(->)를 오른쪽 유형에만 적용하는 것이 가능합니까(예:(-> a)) 종류의 유형 생성자를 얻으려면 * -> *?
해결책
아니요, 현재는 불가능합니다.Haskell의 유형 시스템에는 대부분의 경우 유용하고 편리하게 사용할 수 있는 특정 제한 사항이 있으며, 이것이 바로 그러한 제한 사항 중 하나입니다.가장 좋은 대안은 newtype을 사용하는 것입니다.
newtype FuncFlip r a = FuncFlip { unFuncFlip :: a -> r }
뉴타입은 컴파일러가 유형 검사 및 유형 지정 디스패치(유형 클래스)를 올바르게 수행하는 방법을 알 수 있도록 돕는 단순한 태그입니다.아마도 일부 유형 클래스 인스턴스를 제공하기 위해 유형 인수를 뒤집기를 원했을 것입니다.이는 해당 타입클래스의 기능을 사용하고 싶을 때마다 특정 입력을 다음과 같이 장식해야 한다는 의미입니다. FuncFlip
, 특정 출력을 다음으로 장식 해제합니다. unFuncFlip
.이는 원하는 것보다 약간 더 장황하지만 사용하려는 유형 클래스의 인스턴스를 명시적으로 식별해야 하기 때문에 실제로 그렇게 나쁘지는 않습니다.
다음의 인스턴스를 생성할 수 있습니다. 뉴타입 이를 위해 귀하에게 편리할 수도 있고 그렇지 않을 수도 있습니다.
instance Newtype (FuncFlip r a) (a -> r) where
pack = FuncFlip
unpack = unFuncFlip
추가 자료: "유형별 조합"이 있습니까?
제휴하지 않습니다 StackOverflow