我是Haskell的新手,对我正在做的事情一无所知。我一直在阅读一些教程,现在正试图逐步完成Roll your own IRC bot示例。
我从ghc上得到了编译错误:
clean = drop 1 . dropWhile (/= ':') . drop 1
错误是:
irc.hs:34:11: parse error on input '='
我做错了什么?
答案 0 :(得分:3)
这实际上很好。如果你在GHCi / Hugs中运行它,那么你就在IO中,所以你需要一个let。
Prelude> let clean = drop 1 . dropWhile (/= ':') . drop 1
Prelude> :t clean
clean :: [Char] -> [Char]
Prelude>
答案 1 :(得分:3)
这是您正在使用的代码,是吗?
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机器人”页面上,但可能不在你想要编译的副本中。