我在Haskell中编写了一个命令行程序。我需要它根据命令行参数分派到正确的加密函数。我已经得到了那么多,但是我需要剩下的参数作为参数传递给函数。我读过:使用Haskell中的命令行参数分派纠正函数
http://learnyouahaskell.com/input-and-output
这就是我得到了这么远:
import qualified CaesarCiphers
import qualified ExptCiphers
dispatch::[(String, String->IO())]
dispatch = [("EEncipher", ExptCiphers.exptEncipherString)
("EDecipher", ExptCiphers.exptDecipherString)
("CEncipher", CaesarCiphers.caesarEncipherString)
("CDecipher", CaesarCiphers.caesarDecipherString)
("CBruteForce", CaesarCiphers.bruteForceCaesar)]
main = do
(command:args) <- getArgs
每个功能需要一些论据,我不知道,直到运行时。如何将这些函数传递给一个函数,看看它们将被绑定在一个列表中?我只是手动抓住他们?像:
这似乎有点丑。是否有某种惯用的方式来做到这一点?那错误检查呢?我的功能没有装备来优雅地处理错误,例如在白痴命令中传递参数。
此外,重要的是,派遣中的每个函数都需要不同数量的参数,所以我无法静态执行此操作(如上所示)。这太糟糕了unCurry command args
不是有效的Haskell。
[CmdLib](http://hackage.haskell.org/package/cmdlib)有一个有趣的解决方案来解决这个问题。不过,不要阻止你找到自己的解决方案! – ephemient 2012-04-04 06:42:07