2017-11-21 8 views
0

에서 재귀 데이터 유형 할 수있는 방법 :이 메시지를 받았습니다나는이 같은 데이터 유형 할 수있는 방법 하스켈

data Xpto = String [Xpto ] 

insertHead :: String -> Xpto 
insertHead s = s [] 

을 :

Type error in application 
*** Expression  : s [] 
*** Term   : s 
*** Type   : [Char] 
*** Does not match : a -> b 
+0

유형은 항상 대문자로 시작합니다. –

+0

완료. 그것은 내 문제를 해결하지 않습니다 .. –

답변

3

이 사실과 아무 상관이 데이터 유형이 재귀적임을 나타냅니다. 소문자 데이터 유형은 정의 할 수 없습니다. 유형은 대문자으로 시작합니다.

또한 에 대한 생성자는이고 가장 간단한 생성자는 아마도 Xpto입니다 (생성자도 마찬가지로 upercase로 시작 함). 서면에 의한 그래서

:

data Xpto = Xpto String [Xpto] 
--  ^constructor 

insertHead :: String -> Xpto 
insertHead s = Xpto s [] 
--   ^apply the data constructor

또는 우리가 flip를 사용하여 insertHead pointfree 만들 수 있습니다 :

insertHead :: String -> Xpto 
insertHead = flip Xpto []
+0

고마워! 하지만 어떻게 목록에 액세스 할 수 있습니까? function2 p (insertHead x xs) = notElem p xs <- 내 문제는 xs에 대한 접근입니다 –

+0

소리가 다른 질문입니다. 여기에 설명 된 배열이없고 링크 된 목록 만 있습니다. –

+0

당신은 rigth @ 토마스 M. DuBuisson입니다. –