나는 하스켈을 배우기 시작했습니다. 비록 내가 단조롭지 만, 나는이 일을하고자한다. 받은 오류가 제목으로 나열됩니다. 이 코드는 목록을 복제하는 동작을 구현하고 새로운 길이로 새로운 길이를 연결하려고 시도한 코드입니다. 이제 하스켈에서 구문 분석이 어떻게 작동하는지에 대한 기본적인 이해를 얻었습니다. 원래 코드 아래에서 구문 분석에 대한 필자의 지식이 적절한 지 확인하기 위해 수정 된 코드 예제를 제공 할 것입니다. 지금 제 질문은이 오류를받지 못하도록 블록을 들여 쓰거나 구조화하는 방법입니다 (O : 충분). 인스턴스 및 형식을 만들 때 누락되는 정보가 있습니까? 내 현재 상태 또는 주요 기능이 SYNTACTICALLY 잘못된 경우 제게 알려 주거나 제안을 제공하지 마십시오. 알아 내고 싶을 때 GHC 오류를 처리 할 것입니다. (이것이 올바른 학습 방법이라고 생각합니다.) 그러나 적절한 형식 지정을 이해하는 데있어 첫 번째 장애물을 극복하는 데 도움이 될 사람의 도움을 요청할 수 있다면 감사하게 생각합니다.구문 분석 오류 : (잘못된 들여 쓰기 또는 잘못 붙인 괄호)
module Main where
import Data.List
n :: Int
x :: [Char]
instance Data stutter n x where
x = []
n = replicate >>= x : (n:xs)
stutter >>= main = concat [x:xs]
let stutter 6 "Iwannabehere" -- <-- parse error occurs here!!!
- 수정 된 코드는 적절한 괄호로 묶어야합니다.
module Main where
import Data.List
n :: Int
x :: [Char]
instance Data stutter n x where{
;x = []
;n = replicate >>= x : (n:xs)
;stutter >>= main = concat [x:xs]
;
};let stutter 6 "Iwannabehere" -- there should be no bracket of any kind at the end of this
내가 블록의 외부에 '하자'표현을 배치, 나는 그것이 내부 간다 믿지 않는 내가 그렇게한다면 나는 또한 구문 분석 오류가 발생합니다. 정확하지는 않지만 어쨌든 물어볼 거라고 생각했습니다.
이 코드에는 많은 문제가 있습니다. 타입 시그니처는 정의가 뒤따라야하기 때문에 'n :: Int' 다음에'x'에 대한 시그니처가 올 바르지 않습니다. 둘째, 인스턴스 데이터를 선언하지만 데이터는이 범위에서 유형 클래스가 아닙니다. 셋째, 최상위 레벨 선언은 표현식이 될 수 없습니다. 즉, 'let'은 유효한 최상위 레벨 구조가 아닙니다. 어쩌면'LYAH'를 읽고 한 번에 한 가지 질문 만하고 시도해야 할 것입니다. –
@ ThomasM.DuBuisson'n :: Int' 다음에'x :: Int'가 오는 것은 완벽하게 유효합니다. 정의는 동일한 파일에 있어야하며 서명에 직접 인접하지 않아도됩니다. – Cubic
'let variable = value'는 GHCi와'do'-blocks만을위한 것입니다. 단순히'variable = value'라고 쓰면됩니다. 하스켈과 관련된 모든 것에 대해 더 알고 싶으면, http://learnyouahaskell.com/chapters를 방문하는 것이 좋습니다. – AJFarmar