Parsing 错误:";变量不在范围内:(<;>;)";使用OPTPASE应用程序库
我在看理查德·库克在SafariBookOnline上制作的视频。他用Haskell构建了一个命令行应用程序。在本视频中,他在编写程序解析命令行参数时解释了一些基本概念 我是Haskell的新手,我不明白为什么这段代码不起作用:Parsing 错误:";变量不在范围内:(<;>;)";使用OPTPASE应用程序库,parsing,haskell,command-line,optparse-applicative,Parsing,Haskell,Command Line,Optparse Applicative,我在看理查德·库克在SafariBookOnline上制作的视频。他用Haskell构建了一个命令行应用程序。在本视频中,他在编写程序解析命令行参数时解释了一些基本概念 我是Haskell的新手,我不明白为什么这段代码不起作用: dataPathParser :: Parser FilePath dataPathParser = strOption $ value defaultDataPath <> long "data-path" <> short 'p'
dataPathParser :: Parser FilePath
dataPathParser = strOption $
value defaultDataPath
<> long "data-path"
<> short 'p'
<> metavar "DATAPATH"
<> help ("path to data file (default " ++ defaultDataPath ++ ")")
dataPathParser::Parser文件路径
dataPathParser=strOption$
值defaultDataPath
长“数据路径”
短“p”
metavar“数据路径”
帮助(“数据文件路径(默认值“++defaultDataPath++”))
此代码在以下情况下不起作用:
itemDescriptionValueParser :: Parser String
itemDescriptionValueParser =
strOption (long "desc" <> short 'd' <> metavar "DESCRIPTION" <> help "description")
itemDescriptionValueParser::解析器字符串
itemDescriptionValueParser=
strOption(长“desc”短“d”元变量“DESCRIPTION”帮助“DESCRIPTION”)
实际上,无论我在哪里写“”,编译器都会告诉我一个错误:
• Variable not in scope:
(<>) :: Mod f5 a5 -> Mod f4 a4 -> Mod ArgumentFields ItemIndex
• Perhaps you meant one of these:
‘<$>’ (imported from Options.Applicative),
‘<*>’ (imported from Options.Applicative),
‘<|>’ (imported from Options.Applicative)
•变量不在范围内:
()::Mod f5 a5->Mod f4 a4->Mod ArgumentFields ItemIndex
•也许你的意思是:
''(从Options.Applicative导入),
''(从Options.Applicative导入),
''(从Options.Applicative导入)
我遇到的问题很可能是由于GHC和OptPass应用程序的版本不同。我用最新的。
哈斯克尔9.12:0.13.2.0
但由于我是新手,我不知道如何重写Richard Cook的代码
我将感谢任何帮助
提前感谢,,
亚历克斯:
可以通过使用Monoid
操作mempty
和mappend
或其别名idm
和组合此处提供的基本修饰符来创建修饰符
但是,它看起来不导出
,因此您需要从以下位置获取它:
。。。或者只是:
import Data.Monoid ((<>))
导入数据.Monoid(())
:
可以通过使用Monoid
操作mempty
和mappend
或其别名idm
和组合此处提供的基本修饰符来创建修饰符
但是,它看起来不导出
,因此您需要从以下位置获取它:
。。。或者只是:
import Data.Monoid ((<>))
导入数据.Monoid(())
非常感谢!这对您来说似乎微不足道,但我从Haskell开始,我考虑的是代码中的问题,而不是导入中的问题。再次感谢@是的,这并不明显。看起来这些示例是为较早版本的optparse应用程序编写的,它确实导出了()
,但更改的原因我不明白:非常感谢!这对您来说似乎微不足道,但我从Haskell开始,我考虑的是代码中的问题,而不是导入中的问题。再次感谢@是的,这并不明显。这些示例似乎是为较早版本的optparse应用程序编写的,该应用程序确实导出了()
,但由于我不理解的原因而更改: