1
다음 코드 조각이 있습니다.Haskell - 두 데이터 형식 중 누락 된 인수 오류 메시지를 생성하십시오.
module Billing.Options
(
GlobalOpts(..)
, globalOptsParser
, parseDb
, parseSql
) where
import Options.Applicative
import Options.Applicative.Simple
import Options.Applicative.Types
import System.FilePath.Posix
import Text.Regex.PCRE
-- ------------------------------------------------------------
data GlobalOpts = GlobalOpts
{
optDb :: String,
optSql :: String
} deriving Show
-- ------------------------------------------------------------
globalOptsParser :: Parser GlobalOpts
globalOptsParser = GlobalOpts
<$> option (parseDb =<< readerAsk)
( long "db"
<> short 'd'
<> metavar "<DB name>"
<> help "dmt | report"
)
<*> option parseSql
( long "sql"
<> metavar "<SQL SELECT statement>"
<> help "sql select statement to use in order to generate JSON config file"
)
-- ------------------------------------------------------------
matches :: String -> String -> Bool
matches = (=~)
-- ------------------------------------------------------------
parseDb :: String -> ReadM String
parseDb val = do
if not (elem val ["dmt", "report"])
then readerError $ "Unknown DB, '" ++ val ++ "'"
else return val
-- ------------------------------------------------------------
parseSql :: ReadM String
parseSql = do
val <- readerAsk
if not (val `matches` "(?i)select .+ from .+")
then readerError $ "Please provide a valid SQL SELECT statement"
else return val
-- [EOF]
다음 인수를 사용하여 구문 분석기를 테스트하고 있습니다. 난 단지 "-d 청구"를 지정
error' = let mp = runParser AllowOpts globalOptsParser ["-d", "billing"]
opts = ParserPrefs "suffix" False False False 80
in fst $ runP mp opts
필요한 인수는, 내가 오류 메시지가 있는지 테스트 할
-d <DB name>
--sql <SQL SELECT statement>
,
Missing: --sql <SQL SELECT statement>
. 나는 결과를 인쇄하는 경우
위의 테스트 코드
Left (MissingError (MultNode [MultNode [MultNode [AltNode [Leaf (Chunk {unChunk = Just --sql <SQL SELECT statement>})]]]]))
위의 결과 (어느 데이터 유형)에서 예상되는 오류 메시지 (String)를 생성하는 방법이 있나요, 다음과 같은 출력을 제공합니다? 하스켈은 설명서에서 뭔가를 찾을 수없고 예를 들어 인터넷 검색이 응답을 생성하지 않았기 때문에이 목적을 위해 사용하기 쉬운 기능을 제공합니까?
하스켈 용 명령 줄 옵션 라이브러리가 너무 많아서 사용중인 라이브러리를 알려주고 가져 오기를 포함시켜야합니다. – ErikR
죄송합니다. 제 질문을 업데이트했습니다. –
@TresiaBurger 그럼 ....'http : // hackage.haskell.org/package/optparse-applicative'를 사용하고 있습니까? –