1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- {-# LANGUAGE RecordWildCards #-}
- module Main where
- import qualified Data.Text as T
- import qualified Data.Text.IO as T
- import Data.TeLML.Parse
- data Weapon = Weapon
- { weaponType :: T.Text
- , weaponName :: T.Text
- , weaponAbility :: T.Text
- , weaponEffect :: T.Text
- } deriving (Eq, Show)
- data Equipment = Equipment
- { equipmentName :: T.Text
- , equipmentAbility :: T.Text
- , equipmentEffect :: T.Text
- } deriving (Eq, Show)
- data Item = Item
- { itemName :: T.Text
- , itemAbility :: T.Text
- , itemEffect :: T.Text
- } deriving (Eq, Show)
- pWeapon :: Parse Document [Weapon]
- pWeapon = select "weapon" $ arg $ do
- weaponType <- field "type" (arg text)
- weaponName <- field "name" (arg text)
- weaponAbility <- field "ability" (arg text)
- weaponEffect <- field "effect" (arg text)
- return Weapon { .. }
- prettyWeapon :: Weapon -> IO ()
- prettyWeapon Weapon { .. } = do
- case weaponType of
- "melee" -> putStr "\x1b[31m"
- "ranged" -> putStr "\x1b[34m"
- "magic" -> putStr "\x1b[33m"
- _ -> return ()
- T.putStr weaponName
- putStr " ("
- T.putStr weaponType
- putStrLn " weapon)\x1b[39m"
- putStr " "
- T.putStr weaponAbility
- putStr ": "
- T.putStrLn (T.unwords (T.words weaponEffect))
- pEquipment :: Parse Document [Equipment]
- pEquipment = select "equipment" $ arg $ do
- equipmentName <- field "name" (arg text)
- equipmentAbility <- field "ability" (arg text)
- equipmentEffect <- field "effect" (arg text)
- return Equipment { .. }
- prettyEquipment :: Equipment -> IO ()
- prettyEquipment Equipment { .. } = do
- putStr "\x1b[32m"
- T.putStr equipmentName
- putStrLn " (equipment)\x1b[39m"
- putStr " "
- T.putStr equipmentAbility
- putStr ": "
- T.putStrLn (T.unwords (T.words equipmentEffect))
- pItem :: Parse Document [Item]
- pItem = select "item" $ arg $ do
- itemName <- field "name" (arg text)
- itemAbility <- field "ability" (arg text)
- itemEffect <- field "effect" (arg text)
- return Item { .. }
- prettyItem :: Item -> IO ()
- prettyItem Item { .. } = do
- putStr "\x1b[35m"
- T.putStr itemName
- putStrLn " (item)\x1b[39m"
- putStr " "
- T.putStr itemAbility
- putStr ": "
- T.putStrLn (T.unwords (T.words itemEffect))
- main :: IO ()
- main = do
- rs <- getContents
- case decode rs pWeapon of
- Left err -> putStrLn err
- Right x -> mapM_ prettyWeapon x
- case decode rs pEquipment of
- Left err -> putStrLn err
- Right x -> mapM_ prettyEquipment x
- case decode rs pItem of
- Left err -> putStrLn err
- Right x -> mapM_ prettyItem x
|