Mana parser based on Parsec

This commit is contained in:
Correl Roush 2012-03-02 10:50:49 -05:00
parent 00ceb48e2f
commit 49d01e6520

57
ManaParser.hs Normal file
View file

@ -0,0 +1,57 @@
module ManaParser where
import Mana
import Text.ParserCombinators.Parsec
mana :: Parser Cost
mana = do
colorless' <- (many colorless)
colored' <- (many colored)
hybrid' <- (many hybrid)
phyrexian' <- (many phyrexian)
eof
return $ Cost (colorless' ++ colored') hybrid' phyrexian'
standard :: Parser Standard
standard = colorless <|> colored
colorless :: Parser Standard
colorless = do
mana <- many1 digit
return $ Standard (read mana :: Int) Colorless
colored :: Parser Standard
colored =
do
mana <- many1 (oneOf ("Uu"))
return $ Standard (length mana) Blue
<|> do
mana <- many1 (oneOf ("Rr"))
return $ Standard (length mana) Red
<|> do
mana <- many1 (oneOf ("Bb"))
return $ Standard (length mana) Black
<|> do
mana <- many1 (oneOf ("Gg"))
return $ Standard (length mana) Green
<|> do
mana <- many1 (oneOf ("Ww"))
return $ Standard (length mana) White
hybrid :: Parser Hybrid
hybrid =
do
char '('
standard' <- standard
char '/'
standard'' <- standard
char ')'
return $ Hybrid standard' standard''
phyrexian :: Parser Phyrexian
phyrexian =
do
char '('
standard' <- standard
string "/p)"
return $ Phyrexian standard'