首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:"Variable not in scope:(<>)“,库为optparse-applicative

错误:"Variable not in scope:(<>)“,库为optparse-applicative
EN

Stack Overflow用户
提问于 2017-11-12 20:34:56
回答 1查看 117关注 0票数 1

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

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

代码语言:javascript
复制
dataPathParser :: Parser FilePath
dataPathParser = strOption $
  value defaultDataPath
  <> long "data-path"
  <> short 'p'
  <> metavar "DATAPATH"
  <> help ("path to data file (default " ++ defaultDataPath ++ ")")

此代码在以下情况下不能很好地工作:

代码语言:javascript
复制
itemDescriptionValueParser :: Parser String
itemDescriptionValueParser =
  strOption (long "desc" <> short 'd' <> metavar "DESCRIPTION" <> help "description")

实际上,无论我在哪里写"<>",我都会收到一个错误,编译器告诉我:

代码语言:javascript
复制
• 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)

我得到的问题很可能是由于GHC和Optparse-applicative的版本不同造成的。我用的是最新的。LTS Haskell 9.12: 0.13.2.0。

但由于我是新手,我想不出如何重写理查德·库克的代码。

如果有任何帮助,我将不胜感激。

提前谢谢你,亚历克斯

EN

回答 1

Stack Overflow用户

发布于 2017-11-12 20:47:06

http://hackage.haskell.org/package/optparse-applicative-0.14.0.0/docs/Options-Applicative.html#t:Parser

可以通过使用Monoid操作memptymappend或其别名idm<>组合此处提供的基本修饰符来创建修饰符。

不过,它看起来并不能导出<>,所以您需要从Data.Monoid获取它

代码语言:javascript
复制
import Data.Monoid

..。或者只是:

代码语言:javascript
复制
import Data.Monoid ((<>))
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47248839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档