2017-11-26 38 views
2

(https://stackoverflow.com/a/37461290/2129302)에 대한 구현 (쇼를) 찾기 :다음 코드는 출신 유도 정의 형

mkStr : (Show a) => tensor shape a -> String 
mkStr x = show x 

하지만 그 대신이 :

tensor : Vect n Nat -> Type -> Type 
tensor []  a = a 
tensor (m :: ms) a = Vect m (tensor ms a) 

나는 다음과 같은 정의하고 싶습니다 다음과 같은 오류가 발생합니다 :

그러나, REPL에서 "show [some tensor value .. .] ". 왜 이것이 문제이며 해결하기 위해 무엇을 할 수 있습니까?

답변

2

a을 표시하지 않으면 tensor shape a이 표시됩니다. 따라서 다음과 같이 작동해야하며 다음 형식으로 형식을 작성해야합니다.

mkStr : (Show (tensor shape a)) => tensor shape a -> String 
mkStr x = show x 
+1

왜 이것이 사실일까요? 확실하게'Show a'의 구현이 있다면'Show (tensor shape a) '도 가능합니다. 'Vect' 자체는'쇼'를 제공한다. –

+0

@RoastedYam'tensor'는 종속 형식의 함수입니다. Idris는'Show' 제약 조건을 만족하는'tensor' 함수의 결과에 대해서 타입 변수'a'에 대해'Show' 제약 조건을 갖는 것만으로 충분하지 않은지 추측하려고하지 않습니다. 또한 'shape'은 유형 변수가 아니기 때문에 특정 유형이 아닙니다. 그것은 'Vect'가 아닙니다. – Shersh