난 단지 다소 서투른 방법으로 이드리스 0.9.12에서 순위-N 유형을 수행 할 수 있습니다 이드리스 구문 분석 발생하기 때문에이드리스
tupleId : ((a : Type) -> a -> a) -> (a, b) -> (a, b)
tupleId f (a, b) = (f _ a, f _ b)
내가, 유형 응용 프로그램있을 때마다 밑줄이 필요
tupleId : ({a : Type} -> a -> a) -> (a, b) -> (a, b) -- doesn't compile
아마 더 큰 문제는 내가 모두에서 높은 순위 종류의 클래스 제약을 할 수 있다는 것입니다 : 오류가 나는 (중첩)하게 암시 인수를 입력하려고 할 때. 나는 이드리스에 다음 하스켈 기능을 변환 할 수 없습니다 :
appShow :: Show a => (forall a. Show a => a -> String) -> a -> String
appShow show x = show x
이 또한 하스켈 Lens s t a b = forall f. Functor f => (a -> f b) -> s -> f t
입니다 Lens
, 같은 종류의 타입 동의어로 이드리스 기능을 사용하여에서 저를 방지 할 수 있습니다.
위의 문제를 해결하거나 피할 수있는 방법은 없나요?
그것은 TODO 목록에 있습니다. 일반적으로 TODO 목록에서 다른 사람이 묻는다면 TODO 목록이 올라와서,이를 묻는 것이 도움이되는 방법 중 하나입니다. :) 놀랍게도 실제로는 좋을 지 모르지만 실제로는별로 요구되지 않았습니다. 암시 적 인수를 얻는 것이 까다로울 수 있으므로 지금은 매우 간단한 접근 방식을 취하고 있습니다. 타입 클래스는 일류 클래스이므로 클래스 제약 조건을 처리하는 어색한 방법이 있습니다. 일반 함수 인수로 처리하고 '% instance'를 사용하여 명시 적으로 인스턴스를 찾습니다. –
@EdwinBrady 덕분에, 나는 이것을 대답으로 받아 들인다. –
아직 적절한 대답이 아닌 것 같아서 ... 곧 다시 전화 드리겠습니다! –