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

时间:2016-10-31 02:43:25

标签: haskell optparse

来自热门optparse库的介绍性代码段:

<$>

请参阅代码段中的注释以了解我的问题/混淆。

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

Q2:此代码段中使用的操作{{1}}是什么?

2 个答案:

答案 0 :(得分:9)

  

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

反过来说:Sample(<$>)的第一个参数,它被映射到Parser String生成的strOption

  

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

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

答案 1 :(得分:0)

使用ApplicativeDoNamedFieldPuns扩展程序,也可以这样写:

{-# language ApplicativeDo #-}
{-# language NamedFieldPuns #-}
import Options.Applicative
import Data.Monoid

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

sample :: Parser Sample
sample = do
    hello <- strOption ( long "hello"
                      <> metavar "TARGET"
                      <> help "Target for the greeting" )
    quiet <- switch ( long "quiet"
                   <> help "Whether to be quiet" )
    pure (Sample {hello,quiet})