我開始學習Haskell。儘管我非常笨拙,但我正在努力完成這項工作。我收到的錯誤被列爲標題。這是我編寫的代碼,用於實現複製列表(n)次並將新長度連接爲新列表的行爲。現在我對Haskell中的解析工作有了基本的瞭解,在我的原始代碼下面,我將舉例說明一些修改後的代碼,以瞭解我對解析的理解是否足夠。我現在的問題是我如何正確地縮進或構建我的塊,以便不會收到此錯誤(是否足夠具體:O) - 在創建實例和格式時是否存在一條信息?如果您發現我的當前實例或主要功能是明顯錯誤,請不要提出或提供建議。我想弄清楚它,並在我接觸到它時處理那個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'。要詳細瞭解與Haskell有關的所有信息,我建議訪問http://learnyouahaskell.com/chapters。 – AJFarmar