2017-11-21 15 views
3

idris에서 종속 레코드의 형식 생성자에 대한 매개 변수에 대한 인터페이스 제약 조건을 사용할 수 있습니까? 인터페이스가 Show : Type -> Type입니다. 지금은 다음에 의존 기록에 제약을 줄 필요가 :Type Constructor 매개 변수에 대한 인터페이스 제약 조건이있는 Idris 종속 레코드

record Source s where 
    constructor MkSource 
    initial : s 

내가 항상 Show의 인스턴스를해야한다 있도록 매개 변수 s에 제약을 줄 필요가있다. 이것을 달성하는 방법?

+0

"항상 '쇼'의 인스턴스"란 말은 "ss : Show s"라는 증언이 있어야한다는 뜻입니까? 그렇다면'Show s' 타입의'Source'에 다른 필드를 추가하는 것이 어떻습니까? – Cactus

+0

질문에'Show' 인터페이스의 실제 정의를 포함시킬 수 있습니까? 예를 들어,'interface'와'where' 키워드를 사용하십시오. –

답변

0

이드리스 무거운 개발하지만 이드리스 그룹이 최근 이메일에 따라 레코드 구문은 현재의 인터페이스를 가지는 형태를 제약 지원하지 않습니다

https://groups.google.com/forum/#!topic/idris-lang/HMeTylslyFc

대신 데이터 형식 구문을 사용해야합니다 , 예.

module Main 

data Source: Type -> Type where 
    MkSource: Show s => s -> Source s 


x: Source Int 
x = MkSource 3 

showSource: Source s -> String 
showSource (MkSource x) = show $ x 

testMe: (showSource $ Main.x = "3") 
testMe = Refl