{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedLists #-} module Character ( Character(..) , Key , dex , new ) where import Data.Aeson (ToJSONKey(..), FromJSONKey(..), ToJSON(..), FromJSON(..), genericToEncoding, genericParseJSON, defaultOptions) import Data.Map (Map) import Data.Vector (Vector) import GHC.Generics (Generic) import qualified Item (Group) import Pokemon (Pokemon) import Tool.Array (Array, malloc) data Badge = Earth | Fire | Water | Plant | Electricity | Psy | Normal deriving (Generic) instance ToJSON Badge where toEncoding = genericToEncoding defaultOptions instance FromJSON Badge data Pocket = Items | Rare | Techniques | Special deriving (Eq, Generic, Ord) instance ToJSON Pocket where toEncoding = genericToEncoding defaultOptions instance FromJSON Pocket instance ToJSONKey Pocket instance FromJSONKey Pocket data Character = Character { items :: Map Pocket (Array Item.Group) , badges :: Array Badge , pokemons :: Array Pokemon } deriving (Generic) instance ToJSON Character where toEncoding = genericToEncoding defaultOptions instance FromJSON Character where parseJSON = genericParseJSON defaultOptions newtype Key = Key Int deriving (Generic) instance ToJSON Key where toEncoding = genericToEncoding defaultOptions instance FromJSON Key where parseJSON = genericParseJSON defaultOptions new :: Character new = Character { items = [ (Items, malloc 30) , (Rare, malloc 10) , (Techniques, malloc 50) , (Special, malloc 5) ] , badges = malloc 8 , pokemons = malloc 6 } dex :: Vector Character dex = []