这更像是一个风格问题,而不是一个如何.
所以我有一个需要两个命令行参数的程序:一个字符串和一个整数.
我这样实现了它:
main = do
args@(~( aString : aInteger : [] ) ) <- getArgs
let parsed@( ~[(n,_)] ) = reads aInteger
if length args /= 2 || L.null parsed
then do
name <- getProgName
hPutStrLn stderr $ "usage: " ++ name ++ " <string> <integer>"
exitFailure
else do
doStuffWith aString n
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但这是我第一次真正在Haskell中使用命令行参数,所以我不确定这是否是一种非常尴尬和难以理解的方式来做我想要的.
使用惰性模式匹配工作,但我可以看到它是如何被其他编码器所厌恶.并且使用read来查看我是否有一个成功的解析在写它时肯定感到尴尬.
有没有比较惯用的方法呢?
回到故事:为了更好地理解Haskell和函数式编程,我给自己做了一些任务.我的第一个任务是创建一个程序,可以查看数据集(一组数字,博客中的单词等),搜索模式或重复,对它们进行分组并报告它们.
听起来很容易.:)
问题:我希望程序首先从文本文件中的数据创建列表变量.我熟悉readFile函数,但我想知道是否有更优雅的方式来输入数据.
例如,我想允许用户在命令行中输入类似的内容来加载程序和数据集.
./haskellprogram textfile.txt
是否有允许这个功能的功能?