了解Haskell流行的optparse-applicative库的介绍性代码片段

Geo*_*rge 1 haskell optparse

来自流行的optparse库的介绍性代码片段:

data Sample = Sample
  { hello :: String
  , quiet :: Bool }

sample :: Parser Sample
sample = Sample
  <$> strOption -- Q1
      ( long "hello"
     <> metavar "TARGET" -- Q2
     <> help "Target for the greeting" )
  <*> switch
      ( long "quiet"
     <> help "Whether to be quiet" )
Run Code Online (Sandbox Code Playgroud)

有关我的问题/疑惑,请参阅代码段中的注释.

Q1:如何将它<$>用作类型构造函数的第一个参数Sample?我认为这个操作必须在函数和仿函数之间使用.

Q2:<>此代码段中使用的操作是什么?

dup*_*ode 9

Q1:如何将它<$>用作类型构造函数Sample的第一个参数?我认为这个操作必须在函数和仿函数之间使用.

它是另一种方式:Sample是第一个参数(<$>),它被映射到Parser String生成的strOption.

Q2:<>此代码段中使用的操作是什么?

(<>)是的同义词mappend,从Monoid阶级.在这种情况下,它用于将各个设置组合到要用于您定义的每个命令行选项的设置集中.

  • @George是的; 你可以用`:t Sample`看到它实际上是一个类型为`String - > Bool - > Sample`的函数. (3认同)