【发布时间】:2011-04-20 13:05:22
【问题描述】:
编辑:我不应该在这么累的时候编码。我正在编译与正在运行的程序不同的副本。很抱歉浪费了您的时间。
我有以下代码可以在我的程序启动时将单个参数设为可选。
main = do
args <- getArgs
handleArgs args
handleArgs :: [String] -> IO ()
handleArgs (server:nick:channel:[]) = IRC.startIRC server 6667 nick channel
handleArgs (server:port:nick:channel:[]) = IRC.startIRC server (read port :: Int) nick channel
handleArgs _ = putStrLn "Incorrect arguments given."
如果我像./program irc.freenode.net 6667 somenick #somechannel 一样运行它,它就会运行。但是,如果我像 ./program irc.freenode.net somenick #somechannel 一样运行它,如果我理解正确的话,这应该使 args 成为列表 "irc.freenode.net":"somenick":"#somechannel":[],
当我在使用 ghc 编译后尝试运行它时,它会给出指向 args <- getArgs 行的模式匹配错误。
更准确地说,错误是:
mbot: user error (Pattern match failure in do expression at core.hs:9:4-32)
【问题讨论】:
-
顺便说一句:
main函数最好写成getArgs >>= handleArgs。