我是Haskell的全新用戶,很少知道我在做什麼。我一直在閱讀一些教程,現在正試圖通過一個Roll your own IRC bot示例。編譯Haskell時出錯
我從GHC上得到一個編譯錯誤:
clean = drop 1 . dropWhile (/= ':') . drop 1
的錯誤是:
irc.hs:34:11: parse error on input '='
我做了什麼錯?
我是Haskell的全新用戶,很少知道我在做什麼。我一直在閱讀一些教程,現在正試圖通過一個Roll your own IRC bot示例。編譯Haskell時出錯
我從GHC上得到一個編譯錯誤:
clean = drop 1 . dropWhile (/= ':') . drop 1
的錯誤是:
irc.hs:34:11: parse error on input '='
我做了什麼錯?
這是您正在使用的代碼,是嗎?
listen :: Handle -> IO()
listen h = forever $ do
t <- hGetLine h
let s = init t
if ping s then pong s else eval h (clean s)
putStrLn s
where
forever a = a >> forever a
clean = drop 1 . dropWhile (/= ':') . drop 1
ping x = "PING :" `isPrefixOf` x
pong x = write h "PONG" (':' : drop 6 x)
確保您的clean
定義是由相同數量的forever
的前述定義縮進。它位於「滾動你自己的IRC bot」頁面,但大概不在你正在編譯的副本中。
這其實很好。如果你在GHCi/Hugs中運行這個,你在IO中,所以你需要一個let。
Prelude> let clean = drop 1 . dropWhile (/= ':') . drop 1
Prelude> :t clean
clean :: [Char] -> [Char]
Prelude>
我也將他的代碼複製粘貼到一個空的.hs文件中,並且編譯得很好。 – 2011-02-08 18:40:08
你應該發佈超過這個小片段(前面的行可能有錯誤)。 – 2011-02-08 06:03:12
'輸入解析錯誤'可能表示空白問題...檢查您沒有混合製表符和空格。但正如TomMD指出的那樣,我們需要了解更多信息。 – stusmith 2011-02-08 08:34:44