Parsing 错误:";变量不在范围内:(<;>;)";使用OPTPASE应用程序库

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'

我在看理查德·库克在SafariBookOnline上制作的视频。他用Haskell构建了一个命令行应用程序。在本视频中,他在编写程序解析命令行参数时解释了一些基本概念

我是Haskell的新手,我不明白为什么这段代码不起作用:

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应用程序编写的,该应用程序确实导出了
()
,但由于我不理解的原因而更改: