尝试使用ReadArgs package,似乎它不支持单参数情况。
{-# LANGUAGE ScopedTypeVariables #-}
import ReadArgs (readArgs)
main = do
(foo :: Int) <- readArgs
print foo
错误是(使用1.0版时):
No instance for (ReadArgs.ArgumentTuple Int)
arising from a use of `readArgs'
我的问题是双重的:
readArgs
如何工作? N.B. ReadArgs的1.1版消除了此“错误”;看评论。
最佳答案
我不太了解我需要启用的所有扩展,但是您可以定义一个ReadArgs.ArgumentTuple a
实例(即使它实际上不是一个语义正确的名称),如下所示:
{-# LANGUAGE FlexibleInstances, UndecidableInstances,
OverlappingInstances, ScopedTypeVariables #-}
import ReadArgs
instance (Argument a) => ArgumentTuple a where
parseArgsFrom ss = do
a :& () <- parseArgsFrom ss
return a
usageFor a = usageFor (a :& ())
main = do
(foo :: Int) <- readArgs
print foo
另外,我不确定该实例是否存在任何问题,尽管它适用于您介绍的示例。我认为库中缺少它是有原因的,但是我可能是错的。
更新
在尝试了几件事之后,确保它们仍然可以工作(如以下示例),我相当确信这不会造成任何问题,因此也许它(或类似的东西)的存在只是一个疏忽。
main = do
(foo :: Int, bar :: Int) <- readArgs
print foo
print bar