{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} -- | Two different XML types have a notion of teams: "TSN.XML.Odds" -- and "TSN.XML.JFile". And in fact those two types agree on the -- team id, abbreviation, and name -- at least for the database -- representation. -- -- This module contains a data type for the common database -- representation. -- module TSN.Team ( Team(..), -- * WARNING: these are private but exported to silence warnings TeamConstructor(..) ) where -- System imports import Database.Groundhog () -- Required for some String instance import Database.Groundhog.TH ( defaultCodegenConfig, groundhog, mkPersist ) -- | The database representation of a team. The 'team_id' is a -- 'String' field because some teams do in fact have ids like -- \"B52\". The pointless \"team_\" prefix is left on the 'team_id' -- field because otherwise the auto-generated column name would -- conflict with the default \"id\" primary key. -- data Team = Team { team_id :: String, -- ^ Some of them contain characters abbreviation :: Maybe String, -- ^ Some teams don't have abbreviations, -- or at least, some sample jfilexml -- don't have them for some teams. name :: Maybe String -- ^ Some teams don't even have names! } deriving (Eq, Show) -- Generate the Groundhog code for 'Team'. mkPersist defaultCodegenConfig [groundhog| - entity: Team dbName: teams constructors: - name: Team uniques: - name: unique_odds_games_team type: constraint fields: [team_id] |]