저는 Haskell 초보자이고 "234"와 같은 아라비아 숫자 또는 "MCMLXIX"와 같은 로마 숫자를 사용할 수있는 파서를 작성하여 Parsec에 대해 배우려고합니다. 나는 라이브러리 roman-numerals를 찾았고 , 그래서 나는 fromRoman
결국 로마 숫자의 아라비아 숫자를 얻어야 할 필요가 있기 때문에 Parsec과 함께 어떻게 든 함수 를 사용하려고 할 것이라고 생각했습니다 . 하지만 난 그냥 아주 아직 강제하는 방법을 모르는 Maybe
의 출력을 fromRoman
로 Parser
. 이것이 내가 지금까지 가지고있는 것입니다.
import Text.Parsec
import Text.Parsec.Text (Parser)
import Text.Numeral.Roman
arabicNum :: Parser Int
arabicNum = do
n <- many1 digit
return (read n)
isChapter :: Inline -> Bool
isChapter str = str == Str "CHAPTER"
number :: Parser Int
number = arabicNum <|> romanNum
romanNum :: Parser Int
romanNum = do
str <- many1 char
return case (fromRoman str) of
Just n -> n
Nothing -> Nothing
하지만 주사위는 없어요. 아직 제가 뭘하는지 잘 모르겠거든요.
귀하의 경우 Maybe
입니다 Nothing
, 당신은 할 수 fail
파서 오류가 발생합니다. 무언가라면 할 수 return
있습니다.
romanNum :: Parser Int
romanNum = do
str <- many1 $ oneOf "MDCLXVI"
case fromRoman str of
Just n -> return n
Nothing -> fail $ str ++ " is not a valid roman numeral"
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다