Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell OPTPASE应用程序非空字符串参数_Haskell_Optparse Applicative - Fatal编程技术网

Haskell OPTPASE应用程序非空字符串参数

Haskell OPTPASE应用程序非空字符串参数,haskell,optparse-applicative,Haskell,Optparse Applicative,如何实现非空字符串参数 parserStart :: Parser String parser = strArgument (metavar "EXAMPLE") 如何防止它成功解析空字符串-“” 以前有过Parsec/Attoparsec的经验,我假设我可以编写自己的解析器,或者可能使用一些应用程序来检查值,如果它是空字符串,则会失败(我认为这是不可能的,因为我需要一个Monad)我通常使用Options.applicative.eitherReader,它是绑定readerAsk的结果并

如何实现非空字符串参数

parserStart :: Parser String
parser = strArgument (metavar "EXAMPLE") 
如何防止它成功解析空字符串-
“”


以前有过Parsec/Attoparsec的经验,我假设我可以编写自己的解析器,或者可能使用一些应用程序来检查值,如果它是空字符串,则会失败(我认为这是不可能的,因为我需要一个Monad)

我通常使用
Options.applicative.eitherReader
,它是绑定
readerAsk
的结果并相应地调用
fail
return
的模式的一个小包装器:
nonEmptyStr=eitherReader\case{“-->Left”…;x->Right$fromString x}
(也带有
块参数)
import Data.String
import Data.Text
import Options.Applicative.Types (ReadM, readerAsk)

nonEmptystr :: IsString s => ReadM s
nonEmptystr = do
  readerAsk >>= \case
    "" -> fail "Invalid argument: Empty string"
    x -> pure $ fromString x

f :: Parser Text
f = argument nonEmptystr (metavar "task")