所以我正在查看CmdArgs documentation中的示例,并且我正在尝试构建Hello World程序,以便创建一个简单的CLI程序,该程序将文件名作为输入,并且只显示该文件的内容(如cat
)。但我是Haskell的初学者,几乎不知道我在做什么。这是我到目前为止所做的:
{-# LANGUAGE DeriveDataTypeable #-}
module ShowFile where
import System.Console.CmdArgs
data ShowFile = ShowFile {file :: Maybe FilePath}
deriving (Show, Data, Typeable)
showFile = ShowFile
{file = def &= typ "FILE" &= argPos 0}
main = print =<< cmdArgs showFile
所以正在运行runhaskell mycat.hs test.txt
显示:
ShowFile {file = Just "test.txt"}
所以有些东西在起作用!现在如何让它显示test.txt
的内容呢?我一直在尝试这样的事情:
main = getContents showFile
但还没有发现正确的事情。
答案 0 :(得分:5)
选项上的模式匹配。
main = do
options <- cmdArgs showFile
contents <- case options of
ShowFile { file = Nothing } -> getContents
ShowFile { file = Just f } -> readFile f
putStr contents