optparse-text (empty) → 0.1.0.0
raw patch · 7 files changed
+243/−0 lines, 7 filesdep +basedep +hspecdep +optparse-applicativesetup-changed
Dependencies added: base, hspec, optparse-applicative, optparse-text, text
Files
- LICENSE +30/−0
- README.md +35/−0
- Setup.hs +2/−0
- optparse-text.cabal +52/−0
- src/Options/Applicative/Text.hs +23/−0
- stack.yaml +67/−0
- test/Spec.hs +34/−0
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright Pascal Hartig (c) 2016++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Pascal Hartig nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README.md view
@@ -0,0 +1,35 @@+# optparse-text+[](https://travis-ci.org/passy/optparse-text)++> Helpers for+> [`optparse-applicative`](https://hackage.haskell.org/package/optparse-applicative)+> to deal with [`Data.Text`](https://hackage.haskell.org/package/text).++## Example++```haskell+import qualified Data.Text as T+import qualified Options.Applicative as Opt+import qualified Options.Applicative.Text as OptT++data Options = Options { text :: T.Text+ , textArg :: T.Text+ , textOpt :: T.Text }+ deriving (Eq, Show)++optParser :: Opt.Parser Options+optParser = Options <$> Opt.argument OptT.text ( Opt.metavar "TEXT" )+ <*> OptT.textArgument ( Opt.metavar "TEXT2" )+ <*> OptT.textOption ( Opt.long "textopt" )+```++## Status++About to be published.++## Alternatives++You may want to consider using+[optparse-generic](https://github.com/Gabriel439/Haskell-Optparse-Generic-Library)+which has built-in support for Text and provides a very convient generic+interface to optparse avoiding a lot of boilerplate.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ optparse-text.cabal view
@@ -0,0 +1,52 @@+-- This file has been generated from package.yaml by hpack version 0.14.0.+--+-- see: https://github.com/sol/hpack++name: optparse-text+version: 0.1.0.0+synopsis: Data.Text helpers for optparse-applicative+category: Development+homepage: https://github.com/passy/optparse-text#readme+bug-reports: https://github.com/passy/optparse-text/issues+maintainer: Pascal Hartig <i@passy.me>+license: BSD3+license-file: LICENSE+tested-with: GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.1+build-type: Simple+cabal-version: >= 1.10++extra-source-files:+ README.md+ stack.yaml++source-repository head+ type: git+ location: https://github.com/passy/optparse-text++library+ hs-source-dirs:+ src+ ghc-options: -Wall -fwarn-tabs -fwarn-incomplete-record-updates -fwarn-monomorphism-restriction -fwarn-unused-do-bind+ build-depends:+ base >= 4.6 && < 5+ , optparse-applicative+ , text+ exposed-modules:+ Options.Applicative.Text+ other-modules:+ Paths_optparse_text+ default-language: Haskell2010++test-suite spec+ type: exitcode-stdio-1.0+ main-is: Spec.hs+ hs-source-dirs:+ test+ ghc-options: -Wall -fwarn-tabs -fwarn-incomplete-record-updates -fwarn-monomorphism-restriction -fwarn-unused-do-bind -threaded -rtsopts -with-rtsopts=-N+ build-depends:+ base >= 4.6 && < 5+ , optparse-applicative+ , text+ , optparse-text+ , hspec+ default-language: Haskell2010
+ src/Options/Applicative/Text.hs view
@@ -0,0 +1,23 @@+-- | This library provides parser builders akin to what optparse-applicative+-- offers for 'String' out of the Box, but for 'Data.Text'.+module Options.Applicative.Text+ ( text+ , textOption+ , textArgument ) where++import Control.Applicative ((<$>))+import qualified Data.Text as T+import qualified Options.Applicative as Opt+import qualified Options.Applicative.Types as Opt++-- | Text 'Option' reader.+text :: Opt.ReadM T.Text+text = T.pack <$> Opt.readerAsk++-- | Builder for an option taking a 'Data.Text' argument.+textOption :: Opt.Mod Opt.OptionFields T.Text -> Opt.Parser T.Text+textOption = Opt.option text++-- | Builder for a 'Text' argument.+textArgument :: Opt.Mod Opt.ArgumentFields T.Text -> Opt.Parser T.Text+textArgument = Opt.argument text
+ stack.yaml view
@@ -0,0 +1,67 @@+# This file was automatically generated by 'stack init'+# +# Some commonly used options have been documented as comments in this file.+# For advanced use and comprehensive documentation of the format, please see:+# http://docs.haskellstack.org/en/stable/yaml_configuration/++# Resolver to choose a 'specific' stackage snapshot or a compiler version.+# A snapshot resolver dictates the compiler version and the set of packages+# to be used for project dependencies. For example:+# +# resolver: lts-3.5+# resolver: nightly-2015-09-21+# resolver: ghc-7.10.2+# resolver: ghcjs-0.1.0_ghc-7.10.2+# resolver:+# name: custom-snapshot+# location: "./custom-snapshot.yaml"+# resolver: lts-6.4+resolver: nightly-2016-06-21++# User packages to be built.+# Various formats can be used as shown in the example below.+# +# packages:+# - some-directory+# - https://example.com/foo/bar/baz-0.0.2.tar.gz+# - location:+# git: https://github.com/commercialhaskell/stack.git+# commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a+# - location: https://github.com/commercialhaskell/stack/commit/e7b331f14bcffb8367cd58fbfc8b40ec7642100a+# extra-dep: true+# subdirs:+# - auto-update+# - wai+# +# A package marked 'extra-dep: true' will only be built if demanded by a+# non-dependency (i.e. a user package), and its test suites and benchmarks+# will not be run. This is useful for tweaking upstream packages.+packages:+- '.'+# Dependency packages to be pulled from upstream that are not in the resolver+# (e.g., acme-missiles-0.3)+extra-deps: []++# Override default flag values for local packages and extra-deps+flags: {}++# Extra package databases containing global packages+extra-package-dbs: []++# Control whether we use the GHC we find on the path+# system-ghc: true+# +# Require a specific version of stack, using version ranges+# require-stack-version: -any # Default+# require-stack-version: ">=1.1"+# +# Override the architecture used by stack, especially useful on Windows+# arch: i386+# arch: x86_64+# +# Extra directories used by stack for building+# extra-include-dirs: [/path/to/dir]+# extra-lib-dirs: [/path/to/dir]+# +# Allow a newer minor version of GHC than the snapshot specifies+# compiler-check: newer-minor
+ test/Spec.hs view
@@ -0,0 +1,34 @@+{-# LANGUAGE OverloadedStrings #-}++import Control.Applicative ((<$>), (<*>))+import qualified Data.Text as T+import qualified Options.Applicative as Opt+import Options.Applicative.Extra (execParserPure, getParseResult)+import qualified Options.Applicative.Text as OptT+import Test.Hspec++data Options = Options { text :: T.Text+ , textArg :: T.Text+ , textOpt :: T.Text }+ deriving (Eq, Show)++optParser :: Opt.Parser Options+optParser = Options <$> Opt.argument OptT.text ( Opt.metavar "TEXT" )+ <*> OptT.textArgument ( Opt.metavar "TEXT2" )+ <*> OptT.textOption ( Opt.long "textopt" )++parser :: Opt.ParserInfo Options+parser = Opt.info (Opt.helper <*> optParser) mempty++main :: IO ()+main = hspec .+ describe "optparse-text" $ do+ let parse args = getParseResult $ execParserPure Opt.defaultPrefs parser args++ it "parses to text arguments" $+ parse ["arg1", "arg2", "--textopt", "hello world"] `shouldBe`+ Just Options {text = "arg1", textArg = "arg2", textOpt = "hello world"}++ it "parses unicode" $+ parse ["🎈", "nø tû brëxit", "--textopt", "Benno Fünfstück"] `shouldBe`+ Just Options {text = "🎈", textArg = "nø tû brëxit", textOpt = "Benno Fünfstück"}