{-# LANGUAGE DeriveGeneric #-} {- LANGUAGE FlexibleInstances #-} module Pokemon ( T(..) ) where import Data.Aeson (ToJSON(..), FromJSON(..), genericToEncoding, genericParseJSON, defaultOptions) import GHC.Generics (Generic) import qualified Pokemon.Species as Species (Key) import Pokemon.Status (Status) import qualified Pokemon.Move as Move (Key) import Tool.Array (Array) data Gender = M | F | NB deriving (Generic) instance ToJSON Gender where toEncoding = genericToEncoding defaultOptions instance FromJSON Gender data T = T { nick :: Maybe String , species :: Species.Key , gender :: Gender , level :: Int , status :: Status , moves :: Array Move.Key } deriving (Generic) instance ToJSON T where toEncoding = genericToEncoding defaultOptions instance FromJSON T where parseJSON = genericParseJSON defaultOptions