--
module TSN.Location (
Location(..),
+ pickle_location,
+ -- * WARNING: these are private but exported to silence warnings
LocationConstructor(..) )
where
-- System imports
+import Data.Tuple.Curry ( uncurryN )
import Database.Groundhog () -- Required for some String instance
import Database.Groundhog.TH (
defaultCodegenConfig,
groundhog,
mkPersist )
+import Text.XML.HXT.Core (
+ PU,
+ xpElem,
+ xpOption,
+ xpText,
+ xpTriple,
+ xpWrap )
-- | Database representation of a location.
type: constraint
fields: [city, state, country]
|]
+
+
+
+-- | We also provide an (un)pickler for one common XML representation,
+-- used at least in "TSN.XML.News" and "TSN.XML.Location".
+--
+pickle_location :: PU Location
+pickle_location =
+ xpElem "location" $
+ xpWrap (from_tuple, to_tuple) $
+ xpTriple (xpOption (xpElem "city" xpText))
+ (xpOption (xpElem "state" xpText))
+ (xpElem "country" xpText)
+ where
+ from_tuple = uncurryN Location
+ to_tuple l = (city l, state l, country l)