packages feed

google-static-maps 0.5.0.3 → 0.6.0.0

raw patch · 5 files changed

+727/−683 lines, 5 filesdep ~servantdep ~servant-clientPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: servant, servant-client

API changes (from Hackage documentation)

- Web.Google.Static.Maps: AC :: Region
- Web.Google.Static.Maps: AD :: Region
- Web.Google.Static.Maps: AE :: Region
- Web.Google.Static.Maps: AF :: Region
- Web.Google.Static.Maps: AG :: Region
- Web.Google.Static.Maps: AI :: Region
- Web.Google.Static.Maps: AL :: Region
- Web.Google.Static.Maps: AM :: Region
- Web.Google.Static.Maps: AO :: Region
- Web.Google.Static.Maps: AQ :: Region
- Web.Google.Static.Maps: AR :: Region
- Web.Google.Static.Maps: AS :: Region
- Web.Google.Static.Maps: AT :: Region
- Web.Google.Static.Maps: AU :: Region
- Web.Google.Static.Maps: AW :: Region
- Web.Google.Static.Maps: AX :: Region
- Web.Google.Static.Maps: AZ :: Region
- Web.Google.Static.Maps: Address :: Text -> Address
- Web.Google.Static.Maps: Administrative :: Feature
- Web.Google.Static.Maps: AdministrativeCountry :: Feature
- Web.Google.Static.Maps: AdministrativeLandParcel :: Feature
- Web.Google.Static.Maps: AdministrativeLocality :: Feature
- Web.Google.Static.Maps: AdministrativeNeighborhood :: Feature
- Web.Google.Static.Maps: AdministrativeProvince :: Feature
- Web.Google.Static.Maps: AllElements :: Element
- Web.Google.Static.Maps: AllFeatures :: Feature
- Web.Google.Static.Maps: AllGeometry :: Element
- Web.Google.Static.Maps: AllLabels :: Element
- Web.Google.Static.Maps: AnchorBottom :: StdAnchor
- Web.Google.Static.Maps: AnchorBottomLeft :: StdAnchor
- Web.Google.Static.Maps: AnchorBottomRight :: StdAnchor
- Web.Google.Static.Maps: AnchorCenter :: StdAnchor
- Web.Google.Static.Maps: AnchorLeft :: StdAnchor
- Web.Google.Static.Maps: AnchorPoint :: Int -> Int -> Anchor
- Web.Google.Static.Maps: AnchorRight :: StdAnchor
- Web.Google.Static.Maps: AnchorTop :: StdAnchor
- Web.Google.Static.Maps: AnchorTopLeft :: StdAnchor
- Web.Google.Static.Maps: AnchorTopRight :: StdAnchor
- Web.Google.Static.Maps: Arabic :: Language
- Web.Google.Static.Maps: BA :: Region
- Web.Google.Static.Maps: BB :: Region
- Web.Google.Static.Maps: BD :: Region
- Web.Google.Static.Maps: BE :: Region
- Web.Google.Static.Maps: BF :: Region
- Web.Google.Static.Maps: BG :: Region
- Web.Google.Static.Maps: BH :: Region
- Web.Google.Static.Maps: BI :: Region
- Web.Google.Static.Maps: BJ :: Region
- Web.Google.Static.Maps: BL :: Region
- Web.Google.Static.Maps: BM :: Region
- Web.Google.Static.Maps: BN :: Region
- Web.Google.Static.Maps: BO :: Region
- Web.Google.Static.Maps: BQ :: Region
- Web.Google.Static.Maps: BR :: Region
- Web.Google.Static.Maps: BS :: Region
- Web.Google.Static.Maps: BT :: Region
- Web.Google.Static.Maps: BV :: Region
- Web.Google.Static.Maps: BW :: Region
- Web.Google.Static.Maps: BY :: Region
- Web.Google.Static.Maps: BZ :: Region
- Web.Google.Static.Maps: Basque :: Language
- Web.Google.Static.Maps: Bengali :: Language
- Web.Google.Static.Maps: Black :: StdColor
- Web.Google.Static.Maps: Blue :: StdColor
- Web.Google.Static.Maps: Brown :: StdColor
- Web.Google.Static.Maps: Bulgarian :: Language
- Web.Google.Static.Maps: CA :: Region
- Web.Google.Static.Maps: CC :: Region
- Web.Google.Static.Maps: CD :: Region
- Web.Google.Static.Maps: CF :: Region
- Web.Google.Static.Maps: CG :: Region
- Web.Google.Static.Maps: CH :: Region
- Web.Google.Static.Maps: CI :: Region
- Web.Google.Static.Maps: CK :: Region
- Web.Google.Static.Maps: CL :: Region
- Web.Google.Static.Maps: CM :: Region
- Web.Google.Static.Maps: CN :: Region
- Web.Google.Static.Maps: CO :: Region
- Web.Google.Static.Maps: CR :: Region
- Web.Google.Static.Maps: CU :: Region
- Web.Google.Static.Maps: CV :: Region
- Web.Google.Static.Maps: CW :: Region
- Web.Google.Static.Maps: CX :: Region
- Web.Google.Static.Maps: CY :: Region
- Web.Google.Static.Maps: CZ :: Region
- Web.Google.Static.Maps: Catalan :: Language
- Web.Google.Static.Maps: Center :: Location -> Center
- Web.Google.Static.Maps: ChineseSimplified :: Language
- Web.Google.Static.Maps: ChineseTraditional :: Language
- Web.Google.Static.Maps: Coords :: LatLng -> Location
- Web.Google.Static.Maps: Croatian :: Language
- Web.Google.Static.Maps: CustomIcon :: URI -> Maybe Anchor -> MarkerStyle
- Web.Google.Static.Maps: Czech :: Language
- Web.Google.Static.Maps: DE :: Region
- Web.Google.Static.Maps: DJ :: Region
- Web.Google.Static.Maps: DK :: Region
- Web.Google.Static.Maps: DM :: Region
- Web.Google.Static.Maps: DO :: Region
- Web.Google.Static.Maps: DZ :: Region
- Web.Google.Static.Maps: Danish :: Language
- Web.Google.Static.Maps: Double :: Scale
- Web.Google.Static.Maps: Dutch :: Language
- Web.Google.Static.Maps: EC :: Region
- Web.Google.Static.Maps: EE :: Region
- Web.Google.Static.Maps: EG :: Region
- Web.Google.Static.Maps: EH :: Region
- Web.Google.Static.Maps: ER :: Region
- Web.Google.Static.Maps: ES :: Region
- Web.Google.Static.Maps: ET :: Region
- Web.Google.Static.Maps: EU :: Region
- Web.Google.Static.Maps: English :: Language
- Web.Google.Static.Maps: EnglishAustralian :: Language
- Web.Google.Static.Maps: EnglishBritish :: Language
- Web.Google.Static.Maps: FI :: Region
- Web.Google.Static.Maps: FJ :: Region
- Web.Google.Static.Maps: FK :: Region
- Web.Google.Static.Maps: FM :: Region
- Web.Google.Static.Maps: FO :: Region
- Web.Google.Static.Maps: FR :: Region
- Web.Google.Static.Maps: Farsi :: Language
- Web.Google.Static.Maps: Filipino :: Language
- Web.Google.Static.Maps: Finnish :: Language
- Web.Google.Static.Maps: French :: Language
- Web.Google.Static.Maps: GA :: Region
- Web.Google.Static.Maps: GB :: Region
- Web.Google.Static.Maps: GD :: Region
- Web.Google.Static.Maps: GE :: Region
- Web.Google.Static.Maps: GF :: Region
- Web.Google.Static.Maps: GG :: Region
- Web.Google.Static.Maps: GH :: Region
- Web.Google.Static.Maps: GI :: Region
- Web.Google.Static.Maps: GL :: Region
- Web.Google.Static.Maps: GM :: Region
- Web.Google.Static.Maps: GN :: Region
- Web.Google.Static.Maps: GP :: Region
- Web.Google.Static.Maps: GQ :: Region
- Web.Google.Static.Maps: GR :: Region
- Web.Google.Static.Maps: GS :: Region
- Web.Google.Static.Maps: GT :: Region
- Web.Google.Static.Maps: GU :: Region
- Web.Google.Static.Maps: GW :: Region
- Web.Google.Static.Maps: GY :: Region
- Web.Google.Static.Maps: Galician :: Language
- Web.Google.Static.Maps: GeometryFill :: Element
- Web.Google.Static.Maps: GeometryStroke :: Element
- Web.Google.Static.Maps: German :: Language
- Web.Google.Static.Maps: Gray :: StdColor
- Web.Google.Static.Maps: Greek :: Language
- Web.Google.Static.Maps: Green :: StdColor
- Web.Google.Static.Maps: Gujarati :: Language
- Web.Google.Static.Maps: HK :: Region
- Web.Google.Static.Maps: HM :: Region
- Web.Google.Static.Maps: HN :: Region
- Web.Google.Static.Maps: HR :: Region
- Web.Google.Static.Maps: HT :: Region
- Web.Google.Static.Maps: HU :: Region
- Web.Google.Static.Maps: Hebrew :: Language
- Web.Google.Static.Maps: Hindi :: Language
- Web.Google.Static.Maps: Hungarian :: Language
- Web.Google.Static.Maps: Hybrid :: MapType
- Web.Google.Static.Maps: ID :: Region
- Web.Google.Static.Maps: IE :: Region
- Web.Google.Static.Maps: IL :: Region
- Web.Google.Static.Maps: IM :: Region
- Web.Google.Static.Maps: IN :: Region
- Web.Google.Static.Maps: IO :: Region
- Web.Google.Static.Maps: IQ :: Region
- Web.Google.Static.Maps: IR :: Region
- Web.Google.Static.Maps: IS :: Region
- Web.Google.Static.Maps: IT :: Region
- Web.Google.Static.Maps: Indonesian :: Language
- Web.Google.Static.Maps: Italian :: Language
- Web.Google.Static.Maps: JE :: Region
- Web.Google.Static.Maps: JM :: Region
- Web.Google.Static.Maps: JO :: Region
- Web.Google.Static.Maps: JP :: Region
- Web.Google.Static.Maps: Japanese :: Language
- Web.Google.Static.Maps: KE :: Region
- Web.Google.Static.Maps: KG :: Region
- Web.Google.Static.Maps: KH :: Region
- Web.Google.Static.Maps: KI :: Region
- Web.Google.Static.Maps: KM :: Region
- Web.Google.Static.Maps: KN :: Region
- Web.Google.Static.Maps: KP :: Region
- Web.Google.Static.Maps: KR :: Region
- Web.Google.Static.Maps: KW :: Region
- Web.Google.Static.Maps: KY :: Region
- Web.Google.Static.Maps: KZ :: Region
- Web.Google.Static.Maps: Kannada :: Language
- Web.Google.Static.Maps: Key :: Text -> Key
- Web.Google.Static.Maps: Korean :: Language
- Web.Google.Static.Maps: LA :: Region
- Web.Google.Static.Maps: LB :: Region
- Web.Google.Static.Maps: LC :: Region
- Web.Google.Static.Maps: LI :: Region
- Web.Google.Static.Maps: LK :: Region
- Web.Google.Static.Maps: LR :: Region
- Web.Google.Static.Maps: LS :: Region
- Web.Google.Static.Maps: LT :: Region
- Web.Google.Static.Maps: LU :: Region
- Web.Google.Static.Maps: LV :: Region
- Web.Google.Static.Maps: LY :: Region
- Web.Google.Static.Maps: LabelsIcon :: Element
- Web.Google.Static.Maps: LabelsText :: Element
- Web.Google.Static.Maps: LabelsTextFill :: Element
- Web.Google.Static.Maps: LabelsTextStroke :: Element
- Web.Google.Static.Maps: Landscape :: Feature
- Web.Google.Static.Maps: LandscapeManMade :: Feature
- Web.Google.Static.Maps: LandscapeNatural :: Feature
- Web.Google.Static.Maps: LandscapeNaturalLandcover :: Feature
- Web.Google.Static.Maps: LandscapeNaturalTerrain :: Feature
- Web.Google.Static.Maps: LatLng :: Double -> Double -> LatLng
- Web.Google.Static.Maps: Latvian :: Language
- Web.Google.Static.Maps: Lithuanian :: Language
- Web.Google.Static.Maps: Locale :: Address -> Location
- Web.Google.Static.Maps: MA :: Region
- Web.Google.Static.Maps: MC :: Region
- Web.Google.Static.Maps: MD :: Region
- Web.Google.Static.Maps: ME :: Region
- Web.Google.Static.Maps: MF :: Region
- Web.Google.Static.Maps: MG :: Region
- Web.Google.Static.Maps: MH :: Region
- Web.Google.Static.Maps: MK :: Region
- Web.Google.Static.Maps: ML :: Region
- Web.Google.Static.Maps: MM :: Region
- Web.Google.Static.Maps: MN :: Region
- Web.Google.Static.Maps: MO :: Region
- Web.Google.Static.Maps: MP :: Region
- Web.Google.Static.Maps: MQ :: Region
- Web.Google.Static.Maps: MR :: Region
- Web.Google.Static.Maps: MS :: Region
- Web.Google.Static.Maps: MT :: Region
- Web.Google.Static.Maps: MU :: Region
- Web.Google.Static.Maps: MV :: Region
- Web.Google.Static.Maps: MW :: Region
- Web.Google.Static.Maps: MX :: Region
- Web.Google.Static.Maps: MY :: Region
- Web.Google.Static.Maps: MZ :: Region
- Web.Google.Static.Maps: Malayalam :: Language
- Web.Google.Static.Maps: MapStyle :: Maybe Feature -> Maybe Element -> [MapStyleOp] -> MapStyle
- Web.Google.Static.Maps: Marathi :: Language
- Web.Google.Static.Maps: MarkerColor :: Word8 -> Word8 -> Word8 -> MarkerColor
- Web.Google.Static.Maps: MarkerLabel :: Char -> MarkerLabel
- Web.Google.Static.Maps: Markers :: Maybe MarkerStyle -> [Location] -> Markers
- Web.Google.Static.Maps: Mid :: MarkerSize
- Web.Google.Static.Maps: NA :: Region
- Web.Google.Static.Maps: NC :: Region
- Web.Google.Static.Maps: NE :: Region
- Web.Google.Static.Maps: NF :: Region
- Web.Google.Static.Maps: NG :: Region
- Web.Google.Static.Maps: NI :: Region
- Web.Google.Static.Maps: NL :: Region
- Web.Google.Static.Maps: NO :: Region
- Web.Google.Static.Maps: NP :: Region
- Web.Google.Static.Maps: NR :: Region
- Web.Google.Static.Maps: NU :: Region
- Web.Google.Static.Maps: NZ :: Region
- Web.Google.Static.Maps: Norwegian :: Language
- Web.Google.Static.Maps: OM :: Region
- Web.Google.Static.Maps: Off :: Visibility
- Web.Google.Static.Maps: On :: Visibility
- Web.Google.Static.Maps: Orange :: StdColor
- Web.Google.Static.Maps: PA :: Region
- Web.Google.Static.Maps: PE :: Region
- Web.Google.Static.Maps: PF :: Region
- Web.Google.Static.Maps: PG :: Region
- Web.Google.Static.Maps: PH :: Region
- Web.Google.Static.Maps: PK :: Region
- Web.Google.Static.Maps: PL :: Region
- Web.Google.Static.Maps: PM :: Region
- Web.Google.Static.Maps: PN :: Region
- Web.Google.Static.Maps: PR :: Region
- Web.Google.Static.Maps: PS :: Region
- Web.Google.Static.Maps: PT :: Region
- Web.Google.Static.Maps: PW :: Region
- Web.Google.Static.Maps: PY :: Region
- Web.Google.Static.Maps: Path :: Maybe PathStyle -> [Location] -> Path
- Web.Google.Static.Maps: PathColor :: Word8 -> Word8 -> Word8 -> PathColor
- Web.Google.Static.Maps: PathColorAlpha :: Word8 -> Word8 -> Word8 -> Word8 -> PathColor
- Web.Google.Static.Maps: PathGeodesic :: Bool -> PathGeodesic
- Web.Google.Static.Maps: PathStyle :: Maybe PathWeight -> Maybe PathColor -> Maybe PathColor -> Maybe PathGeodesic -> PathStyle
- Web.Google.Static.Maps: PathWeight :: Int -> PathWeight
- Web.Google.Static.Maps: Png32 :: Format
- Web.Google.Static.Maps: Png8 :: Format
- Web.Google.Static.Maps: Poi :: Feature
- Web.Google.Static.Maps: PoiAttraction :: Feature
- Web.Google.Static.Maps: PoiBusiness :: Feature
- Web.Google.Static.Maps: PoiGovernment :: Feature
- Web.Google.Static.Maps: PoiMedical :: Feature
- Web.Google.Static.Maps: PoiPark :: Feature
- Web.Google.Static.Maps: PoiPlaceOfWorship :: Feature
- Web.Google.Static.Maps: PoiSchool :: Feature
- Web.Google.Static.Maps: PoiSportsComplex :: Feature
- Web.Google.Static.Maps: Polish :: Language
- Web.Google.Static.Maps: Portuguese :: Language
- Web.Google.Static.Maps: PortugueseBrazil :: Language
- Web.Google.Static.Maps: PortuguesePortugal :: Language
- Web.Google.Static.Maps: Purple :: StdColor
- Web.Google.Static.Maps: QA :: Region
- Web.Google.Static.Maps: Quadruple :: Scale
- Web.Google.Static.Maps: RE :: Region
- Web.Google.Static.Maps: RO :: Region
- Web.Google.Static.Maps: RS :: Region
- Web.Google.Static.Maps: RU :: Region
- Web.Google.Static.Maps: RW :: Region
- Web.Google.Static.Maps: Red :: StdColor
- Web.Google.Static.Maps: Road :: Feature
- Web.Google.Static.Maps: RoadArterial :: Feature
- Web.Google.Static.Maps: RoadHighway :: Feature
- Web.Google.Static.Maps: RoadHighwayControlledAccess :: Feature
- Web.Google.Static.Maps: RoadLocal :: Feature
- Web.Google.Static.Maps: RoadMap :: MapType
- Web.Google.Static.Maps: Romanian :: Language
- Web.Google.Static.Maps: Russian :: Language
- Web.Google.Static.Maps: SA :: Region
- Web.Google.Static.Maps: SB :: Region
- Web.Google.Static.Maps: SC :: Region
- Web.Google.Static.Maps: SD :: Region
- Web.Google.Static.Maps: SE :: Region
- Web.Google.Static.Maps: SG :: Region
- Web.Google.Static.Maps: SH :: Region
- Web.Google.Static.Maps: SI :: Region
- Web.Google.Static.Maps: SJ :: Region
- Web.Google.Static.Maps: SK :: Region
- Web.Google.Static.Maps: SL :: Region
- Web.Google.Static.Maps: SM :: Region
- Web.Google.Static.Maps: SN :: Region
- Web.Google.Static.Maps: SO :: Region
- Web.Google.Static.Maps: SR :: Region
- Web.Google.Static.Maps: SS :: Region
- Web.Google.Static.Maps: ST :: Region
- Web.Google.Static.Maps: SV :: Region
- Web.Google.Static.Maps: SX :: Region
- Web.Google.Static.Maps: SY :: Region
- Web.Google.Static.Maps: SZ :: Region
- Web.Google.Static.Maps: Satellite :: MapType
- Web.Google.Static.Maps: Secret :: Text -> Secret
- Web.Google.Static.Maps: Serbian :: Language
- Web.Google.Static.Maps: Signature :: Text -> Signature
- Web.Google.Static.Maps: Simplified :: Visibility
- Web.Google.Static.Maps: Single :: Scale
- Web.Google.Static.Maps: Size :: Int -> Int -> Size
- Web.Google.Static.Maps: Slovak :: Language
- Web.Google.Static.Maps: Slovenian :: Language
- Web.Google.Static.Maps: Small :: MarkerSize
- Web.Google.Static.Maps: Spanish :: Language
- Web.Google.Static.Maps: StdAnchor :: StdAnchor -> Anchor
- Web.Google.Static.Maps: StdMarkerColor :: StdColor -> MarkerColor
- Web.Google.Static.Maps: StdMarkerStyle :: Maybe MarkerSize -> Maybe MarkerColor -> Maybe MarkerLabel -> MarkerStyle
- Web.Google.Static.Maps: StdPathColor :: StdColor -> PathColor
- Web.Google.Static.Maps: StyleColor :: Word8 -> Word8 -> Word8 -> MapStyleOp
- Web.Google.Static.Maps: StyleGamma :: Double -> MapStyleOp
- Web.Google.Static.Maps: StyleHue :: Word8 -> Word8 -> Word8 -> MapStyleOp
- Web.Google.Static.Maps: StyleInvertLightness :: Bool -> MapStyleOp
- Web.Google.Static.Maps: StyleLightness :: Double -> MapStyleOp
- Web.Google.Static.Maps: StyleSaturation :: Double -> MapStyleOp
- Web.Google.Static.Maps: StyleVisibility :: Visibility -> MapStyleOp
- Web.Google.Static.Maps: StyleWeight :: Int -> MapStyleOp
- Web.Google.Static.Maps: Swedish :: Language
- Web.Google.Static.Maps: TC :: Region
- Web.Google.Static.Maps: TD :: Region
- Web.Google.Static.Maps: TF :: Region
- Web.Google.Static.Maps: TG :: Region
- Web.Google.Static.Maps: TH :: Region
- Web.Google.Static.Maps: TJ :: Region
- Web.Google.Static.Maps: TK :: Region
- Web.Google.Static.Maps: TL :: Region
- Web.Google.Static.Maps: TM :: Region
- Web.Google.Static.Maps: TN :: Region
- Web.Google.Static.Maps: TO :: Region
- Web.Google.Static.Maps: TR :: Region
- Web.Google.Static.Maps: TT :: Region
- Web.Google.Static.Maps: TV :: Region
- Web.Google.Static.Maps: TW :: Region
- Web.Google.Static.Maps: TZ :: Region
- Web.Google.Static.Maps: Tagalog :: Language
- Web.Google.Static.Maps: Tamil :: Language
- Web.Google.Static.Maps: Telugu :: Language
- Web.Google.Static.Maps: Terrain :: MapType
- Web.Google.Static.Maps: Thai :: Language
- Web.Google.Static.Maps: Tiny :: MarkerSize
- Web.Google.Static.Maps: Transit :: Feature
- Web.Google.Static.Maps: TransitLine :: Feature
- Web.Google.Static.Maps: TransitStation :: Feature
- Web.Google.Static.Maps: TransitStationAirport :: Feature
- Web.Google.Static.Maps: TransitStationBus :: Feature
- Web.Google.Static.Maps: TransitStationRail :: Feature
- Web.Google.Static.Maps: Turkish :: Language
- Web.Google.Static.Maps: UA :: Region
- Web.Google.Static.Maps: UG :: Region
- Web.Google.Static.Maps: UK :: Region
- Web.Google.Static.Maps: UM :: Region
- Web.Google.Static.Maps: URI :: String -> Maybe URIAuth -> String -> String -> String -> URI
- Web.Google.Static.Maps: URIAuth :: String -> String -> String -> URIAuth
- Web.Google.Static.Maps: US :: Region
- Web.Google.Static.Maps: UY :: Region
- Web.Google.Static.Maps: UZ :: Region
- Web.Google.Static.Maps: Ukrainian :: Language
- Web.Google.Static.Maps: VA :: Region
- Web.Google.Static.Maps: VC :: Region
- Web.Google.Static.Maps: VE :: Region
- Web.Google.Static.Maps: VG :: Region
- Web.Google.Static.Maps: VI :: Region
- Web.Google.Static.Maps: VN :: Region
- Web.Google.Static.Maps: VU :: Region
- Web.Google.Static.Maps: Vietnamese :: Language
- Web.Google.Static.Maps: Visible :: [Location] -> Visible
- Web.Google.Static.Maps: WF :: Region
- Web.Google.Static.Maps: WS :: Region
- Web.Google.Static.Maps: Water :: Feature
- Web.Google.Static.Maps: White :: StdColor
- Web.Google.Static.Maps: YE :: Region
- Web.Google.Static.Maps: YT :: Region
- Web.Google.Static.Maps: Yellow :: StdColor
- Web.Google.Static.Maps: ZA :: Region
- Web.Google.Static.Maps: ZM :: Region
- Web.Google.Static.Maps: ZW :: Region
- Web.Google.Static.Maps: Zoom :: Int -> Zoom
- Web.Google.Static.Maps: [anchor] :: MarkerStyle -> Maybe Anchor
- Web.Google.Static.Maps: [height] :: Size -> Int
- Web.Google.Static.Maps: [icon] :: MarkerStyle -> URI
- Web.Google.Static.Maps: [lat] :: LatLng -> Double
- Web.Google.Static.Maps: [lng] :: LatLng -> Double
- Web.Google.Static.Maps: [markerColor] :: MarkerStyle -> Maybe MarkerColor
- Web.Google.Static.Maps: [markerLabel] :: MarkerStyle -> Maybe MarkerLabel
- Web.Google.Static.Maps: [markerSize] :: MarkerStyle -> Maybe MarkerSize
- Web.Google.Static.Maps: [pathColor] :: PathStyle -> Maybe PathColor
- Web.Google.Static.Maps: [pathFillColor] :: PathStyle -> Maybe PathColor
- Web.Google.Static.Maps: [pathGeodesic] :: PathStyle -> Maybe PathGeodesic
- Web.Google.Static.Maps: [pathWeight] :: PathStyle -> Maybe PathWeight
- Web.Google.Static.Maps: [uriAuthority] :: URI -> Maybe URIAuth
- Web.Google.Static.Maps: [uriFragment] :: URI -> String
- Web.Google.Static.Maps: [uriPath] :: URI -> String
- Web.Google.Static.Maps: [uriPort] :: URIAuth -> String
- Web.Google.Static.Maps: [uriQuery] :: URI -> String
- Web.Google.Static.Maps: [uriRegName] :: URIAuth -> String
- Web.Google.Static.Maps: [uriScheme] :: URI -> String
- Web.Google.Static.Maps: [uriUserInfo] :: URIAuth -> String
- Web.Google.Static.Maps: [width] :: Size -> Int
- Web.Google.Static.Maps: api :: Proxy GoogleStaticMapsAPI
- Web.Google.Static.Maps: data Anchor
- Web.Google.Static.Maps: data Element
- Web.Google.Static.Maps: data Feature
- Web.Google.Static.Maps: data Format
- Web.Google.Static.Maps: data Language
- Web.Google.Static.Maps: data LatLng
- Web.Google.Static.Maps: data Location
- Web.Google.Static.Maps: data MapStyle
- Web.Google.Static.Maps: data MapStyleOp
- Web.Google.Static.Maps: data MapType
- Web.Google.Static.Maps: data MarkerColor
- Web.Google.Static.Maps: data MarkerSize
- Web.Google.Static.Maps: data MarkerStyle
- Web.Google.Static.Maps: data Markers
- Web.Google.Static.Maps: data Path
- Web.Google.Static.Maps: data PathColor
- Web.Google.Static.Maps: data PathStyle
- Web.Google.Static.Maps: data Region
- Web.Google.Static.Maps: data Scale
- Web.Google.Static.Maps: data Size
- Web.Google.Static.Maps: data StdAnchor
- Web.Google.Static.Maps: data StdColor
- Web.Google.Static.Maps: data URI
- Web.Google.Static.Maps: data URIAuth
- Web.Google.Static.Maps: data Visibility
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Anchor
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Center
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Element
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Feature
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Format
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.MapStyle
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.MapStyleOp
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.MapType
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.MarkerColor
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.MarkerLabel
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.MarkerSize
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.MarkerStyle
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Markers
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Path
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.PathColor
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.PathGeodesic
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.PathStyle
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.PathWeight
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Scale
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Secret
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Signature
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Size
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.StdAnchor
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.StdColor
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Visibility
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Visible
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Zoom
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Anchor
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Center
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Element
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Feature
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Format
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.MapStyle
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.MapStyleOp
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.MapType
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.MarkerColor
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.MarkerLabel
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.MarkerSize
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.MarkerStyle
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Markers
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Path
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.PathColor
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.PathGeodesic
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.PathStyle
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.PathWeight
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Scale
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Secret
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Signature
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Size
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.StdAnchor
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.StdColor
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Visibility
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Visible
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Zoom
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Anchor
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Center
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Element
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Feature
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Format
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.MapStyle
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.MapStyleOp
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.MapType
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.MarkerColor
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.MarkerLabel
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.MarkerSize
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.MarkerStyle
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Markers
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Path
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.PathColor
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.PathGeodesic
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.PathStyle
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.PathWeight
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Scale
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Signature
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Size
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.StdAnchor
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.StdColor
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Visibility
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Visible
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Zoom
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData [Web.Google.Static.Maps.MapStyleOp]
- Web.Google.Static.Maps: newtype Address
- Web.Google.Static.Maps: newtype Center
- Web.Google.Static.Maps: newtype Key
- Web.Google.Static.Maps: newtype MarkerLabel
- Web.Google.Static.Maps: newtype PathGeodesic
- Web.Google.Static.Maps: newtype PathWeight
- Web.Google.Static.Maps: newtype Secret
- Web.Google.Static.Maps: newtype Signature
- Web.Google.Static.Maps: newtype Visible
- Web.Google.Static.Maps: newtype Zoom
- Web.Google.Static.Maps: staticmap :: Manager -> Key -> Maybe Secret -> Maybe Center -> Maybe Zoom -> Size -> Maybe Scale -> Maybe Format -> [MapStyle] -> Maybe MapType -> Maybe Language -> Maybe Region -> [Markers] -> [Path] -> Maybe Visible -> IO (Either ServantError StaticmapResponse)
- Web.Google.Static.Maps: type GoogleStaticMapsAPI = "staticmap" :> QueryParam "key" Key :> QueryParam "center" Center :> QueryParam "zoom" Zoom :> QueryParam "size" Size :> QueryParam "scale" Scale :> QueryParam "format" Format :> QueryParams "style" MapStyle :> QueryParam "maptype" MapType :> QueryParam "language" Language :> QueryParam "region" Region :> QueryParams "markers" Markers :> QueryParams "path" Path :> QueryParam "visible" Visible :> QueryParam "signature" Signature :> Get '[PNG] StaticmapResponse
- Web.Google.Static.Maps: type StaticmapResponse = DynamicImage
+ Web.Google.Maps.Common: Albanian :: Language
+ Web.Google.Maps.Common: Belarusian :: Language
+ Web.Google.Maps.Common: Burmese :: Language
+ Web.Google.Maps.Common: Kazakh :: Language
+ Web.Google.Maps.Common: Kyrgyz :: Language
+ Web.Google.Maps.Common: Macedonian :: Language
+ Web.Google.Maps.Common: Punjabi :: Language
+ Web.Google.Maps.Common: Uzbek :: Language
+ Web.Google.Maps.Static: AC :: Region
+ Web.Google.Maps.Static: AD :: Region
+ Web.Google.Maps.Static: AE :: Region
+ Web.Google.Maps.Static: AF :: Region
+ Web.Google.Maps.Static: AG :: Region
+ Web.Google.Maps.Static: AI :: Region
+ Web.Google.Maps.Static: AL :: Region
+ Web.Google.Maps.Static: AM :: Region
+ Web.Google.Maps.Static: AO :: Region
+ Web.Google.Maps.Static: AQ :: Region
+ Web.Google.Maps.Static: AR :: Region
+ Web.Google.Maps.Static: AS :: Region
+ Web.Google.Maps.Static: AT :: Region
+ Web.Google.Maps.Static: AU :: Region
+ Web.Google.Maps.Static: AW :: Region
+ Web.Google.Maps.Static: AX :: Region
+ Web.Google.Maps.Static: AZ :: Region
+ Web.Google.Maps.Static: Address :: Text -> Address
+ Web.Google.Maps.Static: Administrative :: Feature
+ Web.Google.Maps.Static: AdministrativeCountry :: Feature
+ Web.Google.Maps.Static: AdministrativeLandParcel :: Feature
+ Web.Google.Maps.Static: AdministrativeLocality :: Feature
+ Web.Google.Maps.Static: AdministrativeNeighborhood :: Feature
+ Web.Google.Maps.Static: AdministrativeProvince :: Feature
+ Web.Google.Maps.Static: Albanian :: Language
+ Web.Google.Maps.Static: AllElements :: Element
+ Web.Google.Maps.Static: AllFeatures :: Feature
+ Web.Google.Maps.Static: AllGeometry :: Element
+ Web.Google.Maps.Static: AllLabels :: Element
+ Web.Google.Maps.Static: AnchorBottom :: StdAnchor
+ Web.Google.Maps.Static: AnchorBottomLeft :: StdAnchor
+ Web.Google.Maps.Static: AnchorBottomRight :: StdAnchor
+ Web.Google.Maps.Static: AnchorCenter :: StdAnchor
+ Web.Google.Maps.Static: AnchorLeft :: StdAnchor
+ Web.Google.Maps.Static: AnchorPoint :: Int -> Int -> Anchor
+ Web.Google.Maps.Static: AnchorRight :: StdAnchor
+ Web.Google.Maps.Static: AnchorTop :: StdAnchor
+ Web.Google.Maps.Static: AnchorTopLeft :: StdAnchor
+ Web.Google.Maps.Static: AnchorTopRight :: StdAnchor
+ Web.Google.Maps.Static: Arabic :: Language
+ Web.Google.Maps.Static: BA :: Region
+ Web.Google.Maps.Static: BB :: Region
+ Web.Google.Maps.Static: BD :: Region
+ Web.Google.Maps.Static: BE :: Region
+ Web.Google.Maps.Static: BF :: Region
+ Web.Google.Maps.Static: BG :: Region
+ Web.Google.Maps.Static: BH :: Region
+ Web.Google.Maps.Static: BI :: Region
+ Web.Google.Maps.Static: BJ :: Region
+ Web.Google.Maps.Static: BL :: Region
+ Web.Google.Maps.Static: BM :: Region
+ Web.Google.Maps.Static: BN :: Region
+ Web.Google.Maps.Static: BO :: Region
+ Web.Google.Maps.Static: BQ :: Region
+ Web.Google.Maps.Static: BR :: Region
+ Web.Google.Maps.Static: BS :: Region
+ Web.Google.Maps.Static: BT :: Region
+ Web.Google.Maps.Static: BV :: Region
+ Web.Google.Maps.Static: BW :: Region
+ Web.Google.Maps.Static: BY :: Region
+ Web.Google.Maps.Static: BZ :: Region
+ Web.Google.Maps.Static: Basque :: Language
+ Web.Google.Maps.Static: Belarusian :: Language
+ Web.Google.Maps.Static: Bengali :: Language
+ Web.Google.Maps.Static: Black :: StdColor
+ Web.Google.Maps.Static: Blue :: StdColor
+ Web.Google.Maps.Static: Brown :: StdColor
+ Web.Google.Maps.Static: Bulgarian :: Language
+ Web.Google.Maps.Static: Burmese :: Language
+ Web.Google.Maps.Static: CA :: Region
+ Web.Google.Maps.Static: CC :: Region
+ Web.Google.Maps.Static: CD :: Region
+ Web.Google.Maps.Static: CF :: Region
+ Web.Google.Maps.Static: CG :: Region
+ Web.Google.Maps.Static: CH :: Region
+ Web.Google.Maps.Static: CI :: Region
+ Web.Google.Maps.Static: CK :: Region
+ Web.Google.Maps.Static: CL :: Region
+ Web.Google.Maps.Static: CM :: Region
+ Web.Google.Maps.Static: CN :: Region
+ Web.Google.Maps.Static: CO :: Region
+ Web.Google.Maps.Static: CR :: Region
+ Web.Google.Maps.Static: CU :: Region
+ Web.Google.Maps.Static: CV :: Region
+ Web.Google.Maps.Static: CW :: Region
+ Web.Google.Maps.Static: CX :: Region
+ Web.Google.Maps.Static: CY :: Region
+ Web.Google.Maps.Static: CZ :: Region
+ Web.Google.Maps.Static: Catalan :: Language
+ Web.Google.Maps.Static: Center :: Location -> Center
+ Web.Google.Maps.Static: ChineseSimplified :: Language
+ Web.Google.Maps.Static: ChineseTraditional :: Language
+ Web.Google.Maps.Static: Coords :: LatLng -> Location
+ Web.Google.Maps.Static: Croatian :: Language
+ Web.Google.Maps.Static: CustomIcon :: URI -> Maybe Anchor -> MarkerStyle
+ Web.Google.Maps.Static: Czech :: Language
+ Web.Google.Maps.Static: DE :: Region
+ Web.Google.Maps.Static: DJ :: Region
+ Web.Google.Maps.Static: DK :: Region
+ Web.Google.Maps.Static: DM :: Region
+ Web.Google.Maps.Static: DO :: Region
+ Web.Google.Maps.Static: DZ :: Region
+ Web.Google.Maps.Static: Danish :: Language
+ Web.Google.Maps.Static: Double :: Scale
+ Web.Google.Maps.Static: Dutch :: Language
+ Web.Google.Maps.Static: EC :: Region
+ Web.Google.Maps.Static: EE :: Region
+ Web.Google.Maps.Static: EG :: Region
+ Web.Google.Maps.Static: EH :: Region
+ Web.Google.Maps.Static: ER :: Region
+ Web.Google.Maps.Static: ES :: Region
+ Web.Google.Maps.Static: ET :: Region
+ Web.Google.Maps.Static: EU :: Region
+ Web.Google.Maps.Static: English :: Language
+ Web.Google.Maps.Static: EnglishAustralian :: Language
+ Web.Google.Maps.Static: EnglishBritish :: Language
+ Web.Google.Maps.Static: FI :: Region
+ Web.Google.Maps.Static: FJ :: Region
+ Web.Google.Maps.Static: FK :: Region
+ Web.Google.Maps.Static: FM :: Region
+ Web.Google.Maps.Static: FO :: Region
+ Web.Google.Maps.Static: FR :: Region
+ Web.Google.Maps.Static: Farsi :: Language
+ Web.Google.Maps.Static: Filipino :: Language
+ Web.Google.Maps.Static: Finnish :: Language
+ Web.Google.Maps.Static: French :: Language
+ Web.Google.Maps.Static: GA :: Region
+ Web.Google.Maps.Static: GB :: Region
+ Web.Google.Maps.Static: GD :: Region
+ Web.Google.Maps.Static: GE :: Region
+ Web.Google.Maps.Static: GF :: Region
+ Web.Google.Maps.Static: GG :: Region
+ Web.Google.Maps.Static: GH :: Region
+ Web.Google.Maps.Static: GI :: Region
+ Web.Google.Maps.Static: GL :: Region
+ Web.Google.Maps.Static: GM :: Region
+ Web.Google.Maps.Static: GN :: Region
+ Web.Google.Maps.Static: GP :: Region
+ Web.Google.Maps.Static: GQ :: Region
+ Web.Google.Maps.Static: GR :: Region
+ Web.Google.Maps.Static: GS :: Region
+ Web.Google.Maps.Static: GT :: Region
+ Web.Google.Maps.Static: GU :: Region
+ Web.Google.Maps.Static: GW :: Region
+ Web.Google.Maps.Static: GY :: Region
+ Web.Google.Maps.Static: Galician :: Language
+ Web.Google.Maps.Static: GeometryFill :: Element
+ Web.Google.Maps.Static: GeometryStroke :: Element
+ Web.Google.Maps.Static: German :: Language
+ Web.Google.Maps.Static: Gray :: StdColor
+ Web.Google.Maps.Static: Greek :: Language
+ Web.Google.Maps.Static: Green :: StdColor
+ Web.Google.Maps.Static: Gujarati :: Language
+ Web.Google.Maps.Static: HK :: Region
+ Web.Google.Maps.Static: HM :: Region
+ Web.Google.Maps.Static: HN :: Region
+ Web.Google.Maps.Static: HR :: Region
+ Web.Google.Maps.Static: HT :: Region
+ Web.Google.Maps.Static: HU :: Region
+ Web.Google.Maps.Static: Hebrew :: Language
+ Web.Google.Maps.Static: Hindi :: Language
+ Web.Google.Maps.Static: Hungarian :: Language
+ Web.Google.Maps.Static: Hybrid :: MapType
+ Web.Google.Maps.Static: ID :: Region
+ Web.Google.Maps.Static: IE :: Region
+ Web.Google.Maps.Static: IL :: Region
+ Web.Google.Maps.Static: IM :: Region
+ Web.Google.Maps.Static: IN :: Region
+ Web.Google.Maps.Static: IO :: Region
+ Web.Google.Maps.Static: IQ :: Region
+ Web.Google.Maps.Static: IR :: Region
+ Web.Google.Maps.Static: IS :: Region
+ Web.Google.Maps.Static: IT :: Region
+ Web.Google.Maps.Static: Indonesian :: Language
+ Web.Google.Maps.Static: Italian :: Language
+ Web.Google.Maps.Static: JE :: Region
+ Web.Google.Maps.Static: JM :: Region
+ Web.Google.Maps.Static: JO :: Region
+ Web.Google.Maps.Static: JP :: Region
+ Web.Google.Maps.Static: Japanese :: Language
+ Web.Google.Maps.Static: KE :: Region
+ Web.Google.Maps.Static: KG :: Region
+ Web.Google.Maps.Static: KH :: Region
+ Web.Google.Maps.Static: KI :: Region
+ Web.Google.Maps.Static: KM :: Region
+ Web.Google.Maps.Static: KN :: Region
+ Web.Google.Maps.Static: KP :: Region
+ Web.Google.Maps.Static: KR :: Region
+ Web.Google.Maps.Static: KW :: Region
+ Web.Google.Maps.Static: KY :: Region
+ Web.Google.Maps.Static: KZ :: Region
+ Web.Google.Maps.Static: Kannada :: Language
+ Web.Google.Maps.Static: Kazakh :: Language
+ Web.Google.Maps.Static: Key :: Text -> Key
+ Web.Google.Maps.Static: Korean :: Language
+ Web.Google.Maps.Static: Kyrgyz :: Language
+ Web.Google.Maps.Static: LA :: Region
+ Web.Google.Maps.Static: LB :: Region
+ Web.Google.Maps.Static: LC :: Region
+ Web.Google.Maps.Static: LI :: Region
+ Web.Google.Maps.Static: LK :: Region
+ Web.Google.Maps.Static: LR :: Region
+ Web.Google.Maps.Static: LS :: Region
+ Web.Google.Maps.Static: LT :: Region
+ Web.Google.Maps.Static: LU :: Region
+ Web.Google.Maps.Static: LV :: Region
+ Web.Google.Maps.Static: LY :: Region
+ Web.Google.Maps.Static: LabelsIcon :: Element
+ Web.Google.Maps.Static: LabelsText :: Element
+ Web.Google.Maps.Static: LabelsTextFill :: Element
+ Web.Google.Maps.Static: LabelsTextStroke :: Element
+ Web.Google.Maps.Static: Landscape :: Feature
+ Web.Google.Maps.Static: LandscapeManMade :: Feature
+ Web.Google.Maps.Static: LandscapeNatural :: Feature
+ Web.Google.Maps.Static: LandscapeNaturalLandcover :: Feature
+ Web.Google.Maps.Static: LandscapeNaturalTerrain :: Feature
+ Web.Google.Maps.Static: LatLng :: Double -> Double -> LatLng
+ Web.Google.Maps.Static: Latvian :: Language
+ Web.Google.Maps.Static: Lithuanian :: Language
+ Web.Google.Maps.Static: Locale :: Address -> Location
+ Web.Google.Maps.Static: MA :: Region
+ Web.Google.Maps.Static: MC :: Region
+ Web.Google.Maps.Static: MD :: Region
+ Web.Google.Maps.Static: ME :: Region
+ Web.Google.Maps.Static: MF :: Region
+ Web.Google.Maps.Static: MG :: Region
+ Web.Google.Maps.Static: MH :: Region
+ Web.Google.Maps.Static: MK :: Region
+ Web.Google.Maps.Static: ML :: Region
+ Web.Google.Maps.Static: MM :: Region
+ Web.Google.Maps.Static: MN :: Region
+ Web.Google.Maps.Static: MO :: Region
+ Web.Google.Maps.Static: MP :: Region
+ Web.Google.Maps.Static: MQ :: Region
+ Web.Google.Maps.Static: MR :: Region
+ Web.Google.Maps.Static: MS :: Region
+ Web.Google.Maps.Static: MT :: Region
+ Web.Google.Maps.Static: MU :: Region
+ Web.Google.Maps.Static: MV :: Region
+ Web.Google.Maps.Static: MW :: Region
+ Web.Google.Maps.Static: MX :: Region
+ Web.Google.Maps.Static: MY :: Region
+ Web.Google.Maps.Static: MZ :: Region
+ Web.Google.Maps.Static: Macedonian :: Language
+ Web.Google.Maps.Static: Malayalam :: Language
+ Web.Google.Maps.Static: MapStyle :: Maybe Feature -> Maybe Element -> [MapStyleOp] -> MapStyle
+ Web.Google.Maps.Static: Marathi :: Language
+ Web.Google.Maps.Static: MarkerColor :: Word8 -> Word8 -> Word8 -> MarkerColor
+ Web.Google.Maps.Static: MarkerLabel :: Char -> MarkerLabel
+ Web.Google.Maps.Static: Markers :: Maybe MarkerStyle -> [Location] -> Markers
+ Web.Google.Maps.Static: Mid :: MarkerSize
+ Web.Google.Maps.Static: NA :: Region
+ Web.Google.Maps.Static: NC :: Region
+ Web.Google.Maps.Static: NE :: Region
+ Web.Google.Maps.Static: NF :: Region
+ Web.Google.Maps.Static: NG :: Region
+ Web.Google.Maps.Static: NI :: Region
+ Web.Google.Maps.Static: NL :: Region
+ Web.Google.Maps.Static: NO :: Region
+ Web.Google.Maps.Static: NP :: Region
+ Web.Google.Maps.Static: NR :: Region
+ Web.Google.Maps.Static: NU :: Region
+ Web.Google.Maps.Static: NZ :: Region
+ Web.Google.Maps.Static: Norwegian :: Language
+ Web.Google.Maps.Static: OM :: Region
+ Web.Google.Maps.Static: Off :: Visibility
+ Web.Google.Maps.Static: On :: Visibility
+ Web.Google.Maps.Static: Orange :: StdColor
+ Web.Google.Maps.Static: PA :: Region
+ Web.Google.Maps.Static: PE :: Region
+ Web.Google.Maps.Static: PF :: Region
+ Web.Google.Maps.Static: PG :: Region
+ Web.Google.Maps.Static: PH :: Region
+ Web.Google.Maps.Static: PK :: Region
+ Web.Google.Maps.Static: PL :: Region
+ Web.Google.Maps.Static: PM :: Region
+ Web.Google.Maps.Static: PN :: Region
+ Web.Google.Maps.Static: PR :: Region
+ Web.Google.Maps.Static: PS :: Region
+ Web.Google.Maps.Static: PT :: Region
+ Web.Google.Maps.Static: PW :: Region
+ Web.Google.Maps.Static: PY :: Region
+ Web.Google.Maps.Static: Path :: Maybe PathStyle -> [Location] -> Path
+ Web.Google.Maps.Static: PathColor :: Word8 -> Word8 -> Word8 -> PathColor
+ Web.Google.Maps.Static: PathColorAlpha :: Word8 -> Word8 -> Word8 -> Word8 -> PathColor
+ Web.Google.Maps.Static: PathGeodesic :: Bool -> PathGeodesic
+ Web.Google.Maps.Static: PathStyle :: Maybe PathWeight -> Maybe PathColor -> Maybe PathColor -> Maybe PathGeodesic -> PathStyle
+ Web.Google.Maps.Static: PathWeight :: Int -> PathWeight
+ Web.Google.Maps.Static: Png32 :: Format
+ Web.Google.Maps.Static: Png8 :: Format
+ Web.Google.Maps.Static: Poi :: Feature
+ Web.Google.Maps.Static: PoiAttraction :: Feature
+ Web.Google.Maps.Static: PoiBusiness :: Feature
+ Web.Google.Maps.Static: PoiGovernment :: Feature
+ Web.Google.Maps.Static: PoiMedical :: Feature
+ Web.Google.Maps.Static: PoiPark :: Feature
+ Web.Google.Maps.Static: PoiPlaceOfWorship :: Feature
+ Web.Google.Maps.Static: PoiSchool :: Feature
+ Web.Google.Maps.Static: PoiSportsComplex :: Feature
+ Web.Google.Maps.Static: Polish :: Language
+ Web.Google.Maps.Static: Portuguese :: Language
+ Web.Google.Maps.Static: PortugueseBrazil :: Language
+ Web.Google.Maps.Static: PortuguesePortugal :: Language
+ Web.Google.Maps.Static: Punjabi :: Language
+ Web.Google.Maps.Static: Purple :: StdColor
+ Web.Google.Maps.Static: QA :: Region
+ Web.Google.Maps.Static: Quadruple :: Scale
+ Web.Google.Maps.Static: RE :: Region
+ Web.Google.Maps.Static: RO :: Region
+ Web.Google.Maps.Static: RS :: Region
+ Web.Google.Maps.Static: RU :: Region
+ Web.Google.Maps.Static: RW :: Region
+ Web.Google.Maps.Static: Red :: StdColor
+ Web.Google.Maps.Static: Road :: Feature
+ Web.Google.Maps.Static: RoadArterial :: Feature
+ Web.Google.Maps.Static: RoadHighway :: Feature
+ Web.Google.Maps.Static: RoadHighwayControlledAccess :: Feature
+ Web.Google.Maps.Static: RoadLocal :: Feature
+ Web.Google.Maps.Static: RoadMap :: MapType
+ Web.Google.Maps.Static: Romanian :: Language
+ Web.Google.Maps.Static: Russian :: Language
+ Web.Google.Maps.Static: SA :: Region
+ Web.Google.Maps.Static: SB :: Region
+ Web.Google.Maps.Static: SC :: Region
+ Web.Google.Maps.Static: SD :: Region
+ Web.Google.Maps.Static: SE :: Region
+ Web.Google.Maps.Static: SG :: Region
+ Web.Google.Maps.Static: SH :: Region
+ Web.Google.Maps.Static: SI :: Region
+ Web.Google.Maps.Static: SJ :: Region
+ Web.Google.Maps.Static: SK :: Region
+ Web.Google.Maps.Static: SL :: Region
+ Web.Google.Maps.Static: SM :: Region
+ Web.Google.Maps.Static: SN :: Region
+ Web.Google.Maps.Static: SO :: Region
+ Web.Google.Maps.Static: SR :: Region
+ Web.Google.Maps.Static: SS :: Region
+ Web.Google.Maps.Static: ST :: Region
+ Web.Google.Maps.Static: SV :: Region
+ Web.Google.Maps.Static: SX :: Region
+ Web.Google.Maps.Static: SY :: Region
+ Web.Google.Maps.Static: SZ :: Region
+ Web.Google.Maps.Static: Satellite :: MapType
+ Web.Google.Maps.Static: Secret :: Text -> Secret
+ Web.Google.Maps.Static: Serbian :: Language
+ Web.Google.Maps.Static: Signature :: Text -> Signature
+ Web.Google.Maps.Static: Simplified :: Visibility
+ Web.Google.Maps.Static: Single :: Scale
+ Web.Google.Maps.Static: Size :: Int -> Int -> Size
+ Web.Google.Maps.Static: Slovak :: Language
+ Web.Google.Maps.Static: Slovenian :: Language
+ Web.Google.Maps.Static: Small :: MarkerSize
+ Web.Google.Maps.Static: Spanish :: Language
+ Web.Google.Maps.Static: StdAnchor :: StdAnchor -> Anchor
+ Web.Google.Maps.Static: StdMarkerColor :: StdColor -> MarkerColor
+ Web.Google.Maps.Static: StdMarkerStyle :: Maybe MarkerSize -> Maybe MarkerColor -> Maybe MarkerLabel -> MarkerStyle
+ Web.Google.Maps.Static: StdPathColor :: StdColor -> PathColor
+ Web.Google.Maps.Static: StyleColor :: Word8 -> Word8 -> Word8 -> MapStyleOp
+ Web.Google.Maps.Static: StyleGamma :: Double -> MapStyleOp
+ Web.Google.Maps.Static: StyleHue :: Word8 -> Word8 -> Word8 -> MapStyleOp
+ Web.Google.Maps.Static: StyleInvertLightness :: Bool -> MapStyleOp
+ Web.Google.Maps.Static: StyleLightness :: Double -> MapStyleOp
+ Web.Google.Maps.Static: StyleSaturation :: Double -> MapStyleOp
+ Web.Google.Maps.Static: StyleVisibility :: Visibility -> MapStyleOp
+ Web.Google.Maps.Static: StyleWeight :: Int -> MapStyleOp
+ Web.Google.Maps.Static: Swedish :: Language
+ Web.Google.Maps.Static: TC :: Region
+ Web.Google.Maps.Static: TD :: Region
+ Web.Google.Maps.Static: TF :: Region
+ Web.Google.Maps.Static: TG :: Region
+ Web.Google.Maps.Static: TH :: Region
+ Web.Google.Maps.Static: TJ :: Region
+ Web.Google.Maps.Static: TK :: Region
+ Web.Google.Maps.Static: TL :: Region
+ Web.Google.Maps.Static: TM :: Region
+ Web.Google.Maps.Static: TN :: Region
+ Web.Google.Maps.Static: TO :: Region
+ Web.Google.Maps.Static: TR :: Region
+ Web.Google.Maps.Static: TT :: Region
+ Web.Google.Maps.Static: TV :: Region
+ Web.Google.Maps.Static: TW :: Region
+ Web.Google.Maps.Static: TZ :: Region
+ Web.Google.Maps.Static: Tagalog :: Language
+ Web.Google.Maps.Static: Tamil :: Language
+ Web.Google.Maps.Static: Telugu :: Language
+ Web.Google.Maps.Static: Terrain :: MapType
+ Web.Google.Maps.Static: Thai :: Language
+ Web.Google.Maps.Static: Tiny :: MarkerSize
+ Web.Google.Maps.Static: Transit :: Feature
+ Web.Google.Maps.Static: TransitLine :: Feature
+ Web.Google.Maps.Static: TransitStation :: Feature
+ Web.Google.Maps.Static: TransitStationAirport :: Feature
+ Web.Google.Maps.Static: TransitStationBus :: Feature
+ Web.Google.Maps.Static: TransitStationRail :: Feature
+ Web.Google.Maps.Static: Turkish :: Language
+ Web.Google.Maps.Static: UA :: Region
+ Web.Google.Maps.Static: UG :: Region
+ Web.Google.Maps.Static: UK :: Region
+ Web.Google.Maps.Static: UM :: Region
+ Web.Google.Maps.Static: URI :: String -> Maybe URIAuth -> String -> String -> String -> URI
+ Web.Google.Maps.Static: URIAuth :: String -> String -> String -> URIAuth
+ Web.Google.Maps.Static: US :: Region
+ Web.Google.Maps.Static: UY :: Region
+ Web.Google.Maps.Static: UZ :: Region
+ Web.Google.Maps.Static: Ukrainian :: Language
+ Web.Google.Maps.Static: Uzbek :: Language
+ Web.Google.Maps.Static: VA :: Region
+ Web.Google.Maps.Static: VC :: Region
+ Web.Google.Maps.Static: VE :: Region
+ Web.Google.Maps.Static: VG :: Region
+ Web.Google.Maps.Static: VI :: Region
+ Web.Google.Maps.Static: VN :: Region
+ Web.Google.Maps.Static: VU :: Region
+ Web.Google.Maps.Static: Vietnamese :: Language
+ Web.Google.Maps.Static: Visible :: [Location] -> Visible
+ Web.Google.Maps.Static: WF :: Region
+ Web.Google.Maps.Static: WS :: Region
+ Web.Google.Maps.Static: Water :: Feature
+ Web.Google.Maps.Static: White :: StdColor
+ Web.Google.Maps.Static: YE :: Region
+ Web.Google.Maps.Static: YT :: Region
+ Web.Google.Maps.Static: Yellow :: StdColor
+ Web.Google.Maps.Static: ZA :: Region
+ Web.Google.Maps.Static: ZM :: Region
+ Web.Google.Maps.Static: ZW :: Region
+ Web.Google.Maps.Static: Zoom :: Int -> Zoom
+ Web.Google.Maps.Static: [anchor] :: MarkerStyle -> Maybe Anchor
+ Web.Google.Maps.Static: [height] :: Size -> Int
+ Web.Google.Maps.Static: [icon] :: MarkerStyle -> URI
+ Web.Google.Maps.Static: [lat] :: LatLng -> Double
+ Web.Google.Maps.Static: [lng] :: LatLng -> Double
+ Web.Google.Maps.Static: [markerColor] :: MarkerStyle -> Maybe MarkerColor
+ Web.Google.Maps.Static: [markerLabel] :: MarkerStyle -> Maybe MarkerLabel
+ Web.Google.Maps.Static: [markerSize] :: MarkerStyle -> Maybe MarkerSize
+ Web.Google.Maps.Static: [pathColor] :: PathStyle -> Maybe PathColor
+ Web.Google.Maps.Static: [pathFillColor] :: PathStyle -> Maybe PathColor
+ Web.Google.Maps.Static: [pathGeodesic] :: PathStyle -> Maybe PathGeodesic
+ Web.Google.Maps.Static: [pathWeight] :: PathStyle -> Maybe PathWeight
+ Web.Google.Maps.Static: [uriAuthority] :: URI -> Maybe URIAuth
+ Web.Google.Maps.Static: [uriFragment] :: URI -> String
+ Web.Google.Maps.Static: [uriPath] :: URI -> String
+ Web.Google.Maps.Static: [uriPort] :: URIAuth -> String
+ Web.Google.Maps.Static: [uriQuery] :: URI -> String
+ Web.Google.Maps.Static: [uriRegName] :: URIAuth -> String
+ Web.Google.Maps.Static: [uriScheme] :: URI -> String
+ Web.Google.Maps.Static: [uriUserInfo] :: URIAuth -> String
+ Web.Google.Maps.Static: [width] :: Size -> Int
+ Web.Google.Maps.Static: api :: Proxy GoogleMapsStaticAPI
+ Web.Google.Maps.Static: data Anchor
+ Web.Google.Maps.Static: data Element
+ Web.Google.Maps.Static: data Feature
+ Web.Google.Maps.Static: data Format
+ Web.Google.Maps.Static: data Language
+ Web.Google.Maps.Static: data LatLng
+ Web.Google.Maps.Static: data Location
+ Web.Google.Maps.Static: data MapStyle
+ Web.Google.Maps.Static: data MapStyleOp
+ Web.Google.Maps.Static: data MapType
+ Web.Google.Maps.Static: data MarkerColor
+ Web.Google.Maps.Static: data MarkerSize
+ Web.Google.Maps.Static: data MarkerStyle
+ Web.Google.Maps.Static: data Markers
+ Web.Google.Maps.Static: data Path
+ Web.Google.Maps.Static: data PathColor
+ Web.Google.Maps.Static: data PathStyle
+ Web.Google.Maps.Static: data Region
+ Web.Google.Maps.Static: data Scale
+ Web.Google.Maps.Static: data Size
+ Web.Google.Maps.Static: data StdAnchor
+ Web.Google.Maps.Static: data StdColor
+ Web.Google.Maps.Static: data URI
+ Web.Google.Maps.Static: data URIAuth
+ Web.Google.Maps.Static: data Visibility
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Anchor
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Center
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Element
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Feature
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Format
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.MapStyle
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.MapStyleOp
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.MapType
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.MarkerColor
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.MarkerLabel
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.MarkerSize
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.MarkerStyle
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Markers
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Path
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.PathColor
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.PathGeodesic
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.PathStyle
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.PathWeight
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Scale
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Secret
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Signature
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Size
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.StdAnchor
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.StdColor
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Visibility
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Visible
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Zoom
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Anchor
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Center
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Element
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Feature
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Format
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.MapStyle
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.MapStyleOp
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.MapType
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.MarkerColor
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.MarkerLabel
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.MarkerSize
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.MarkerStyle
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Markers
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Path
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.PathColor
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.PathGeodesic
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.PathStyle
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.PathWeight
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Scale
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Secret
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Signature
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Size
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.StdAnchor
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.StdColor
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Visibility
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Visible
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Zoom
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Anchor
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Center
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Element
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Feature
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Format
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.MapStyle
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.MapStyleOp
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.MapType
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.MarkerColor
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.MarkerLabel
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.MarkerSize
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.MarkerStyle
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Markers
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Path
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.PathColor
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.PathGeodesic
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.PathStyle
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.PathWeight
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Scale
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Signature
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Size
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.StdAnchor
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.StdColor
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Visibility
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Visible
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Zoom
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData [Web.Google.Maps.Static.MapStyleOp]
+ Web.Google.Maps.Static: newtype Address
+ Web.Google.Maps.Static: newtype Center
+ Web.Google.Maps.Static: newtype Key
+ Web.Google.Maps.Static: newtype MarkerLabel
+ Web.Google.Maps.Static: newtype PathGeodesic
+ Web.Google.Maps.Static: newtype PathWeight
+ Web.Google.Maps.Static: newtype Secret
+ Web.Google.Maps.Static: newtype Signature
+ Web.Google.Maps.Static: newtype Visible
+ Web.Google.Maps.Static: newtype Zoom
+ Web.Google.Maps.Static: staticmap :: Manager -> Key -> Maybe Secret -> Maybe Center -> Maybe Zoom -> Size -> Maybe Scale -> Maybe Format -> [MapStyle] -> Maybe MapType -> Maybe Language -> Maybe Region -> [Markers] -> [Path] -> Maybe Visible -> IO (Either ServantError StaticmapResponse)
+ Web.Google.Maps.Static: type GoogleMapsStaticAPI = "staticmap" :> QueryParam "key" Key :> QueryParam "center" Center :> QueryParam "zoom" Zoom :> QueryParam "size" Size :> QueryParam "scale" Scale :> QueryParam "format" Format :> QueryParams "style" MapStyle :> QueryParam "maptype" MapType :> QueryParam "language" Language :> QueryParam "region" Region :> QueryParams "markers" Markers :> QueryParams "path" Path :> QueryParam "visible" Visible :> QueryParam "signature" Signature :> Get '[PNG] StaticmapResponse
+ Web.Google.Maps.Static: type StaticmapResponse = DynamicImage

Files

changelog.md view
@@ -1,3 +1,14 @@+# 0.6.0.0
+
+* Update documentation to reflect changes to Google Maps Platform
+
+* Rename module `Web.Google.Static.Maps` as `Web.Google.Maps.Static` and
+  `GoogleStaticMapsAPI` as `GoogleMapsStaticAPI`
+
+* Update `Web.Google.Maps.Common.Language` data constructors
+
+* Update dependencies for GHC 8.6.2 and revisit upper bounds
+
 # 0.5.0.3
 
 * Update dependencies for GHC 8.6.1
google-static-maps.cabal view
@@ -1,13 +1,21 @@ name:                google-static-maps
-version:             0.5.0.3
-synopsis:            Bindings to the Google Static Maps API
-description:         The <https://developers.google.com/maps/documentation/static-maps/intro Google Static Maps API>
+version:             0.6.0.0
+synopsis:            Bindings to the Google Maps Static API (formerly Static
+                     Maps API)
+description:         The
+                     <https://developers.google.com/maps/documentation/maps-static/intro Google Maps Static API>
                      returns a map as an image via an HTTP request. This library
                      provides bindings in Haskell to that API.
                      .
-                     NB: The use of the Google Static Maps API services is
-                     subject to the <https://developers.google.com/maps/terms Google Maps APIs Terms of Service>,
-                     which terms restrict the use of content.
+                     NB: The use of the Google Maps Static API services is
+                     subject to the
+                     <https://cloud.google.com/maps-platform/terms/ Google Maps Platform Terms of Service>,
+                     which terms restrict the use of content. End Users' use of
+                     Google Maps is subject to the then-current Google
+                     Maps/Google Earth Additional Terms of Service at
+                     <https://maps.google.com/help/terms_maps.html> and Google
+                     Privacy Policy at
+                     <https://www.google.com/policies/privacy/>.
                      .
                      This package has no connection with Google Inc. or its
                      affiliates.
@@ -24,21 +32,21 @@ 
 library
   hs-source-dirs:      src
-  exposed-modules:     Web.Google.Static.Maps
+  exposed-modules:     Web.Google.Maps.Static
                      , Web.Google.Maps.Common
   build-depends:       base >= 4.8 && < 4.13
-                     , base64-bytestring >= 0.1.1 && < 1.1
-                     , bytestring >= 0.10 && < 0.11
                      , aeson >= 0.7 && < 1.5
+                     , base64-bytestring >= 0.1.1 && < 1.1
                      , bytedump >= 0.9 && < 1.1
+                     , bytestring >= 0.10 && < 0.11
                      , cryptonite >= 0.1 && < 0.26
                      , double-conversion >= 0.2 && < 2.1
                      , http-client >= 0.2 && < 0.6
                      , JuicyPixels >= 1.0 && < 3.4
                      , memory >= 0.1 && < 0.15
                      , network-uri >= 2.6 && < 2.7
-                     , servant >= 0.14.1 && < 0.15
-                     , servant-client >= 0.11 && < 0.15
+                     , servant >= 0.14.1 && < 0.16
+                     , servant-client >= 0.11 && < 0.16
                      , servant-JuicyPixels >= 0.3 && < 0.4
                      , text >= 1.0 && < 1.3
                      , utf8-string >= 0.3 && < 1.1
src/Web/Google/Maps/Common.hs view
@@ -6,8 +6,8 @@ 
 -- |
 -- Module      : Web.Google.Maps.Common
--- Description : Bindings to the Google Static Maps API
--- Copyright   : (c) Mike Pilgrem 2017
+-- Description : Common to the Google Maps Platform
+-- Copyright   : (c) Mike Pilgrem 2017, 2018
 -- Maintainer  : public@pilgrem.com
 -- Stability   : experimental
 --
@@ -77,13 +77,16 @@     deriving (Eq, Show, ToHttpApiData)
 
 -- | Language: supported languages based on the list at
--- <https://developers.google.com/maps/faq#languagesupport> (as at 13 March
--- 2017).
+-- <https://developers.google.com/maps/faq#languagesupport> (as at 29 December
+-- 2018).
 data Language
-    = Arabic
+    = Albanian
+    | Arabic
     | Basque
+    | Belarusian
     | Bengali
     | Bulgarian
+    | Burmese
     | Catalan
     | ChineseSimplified
     | ChineseTraditional
@@ -109,9 +112,12 @@     | Italian
     | Japanese
     | Kannada
+    | Kazakh
     | Korean
+    | Kyrgyz
     | Latvian
     | Lithuanian
+    | Macedonian
     | Malayalam
     | Marathi
     | Norwegian
@@ -119,6 +125,7 @@     | Portuguese
     | PortugueseBrazil
     | PortuguesePortugal
+    | Punjabi
     | Romanian
     | Russian
     | Serbian
@@ -132,15 +139,19 @@     | Thai
     | Turkish
     | Ukrainian
+    | Uzbek
     | Vietnamese
     deriving (Eq, Show)
 
 instance ToHttpApiData Language where
     toUrlPiece language = case language of
+        Albanian           -> "sq"
         Arabic             -> "ar"
         Basque             -> "eu"
+        Belarusian         -> "be"
         Bengali            -> "bn"
         Bulgarian          -> "bg"
+        Burmese            -> "my"
         Catalan            -> "ca"
         ChineseSimplified  -> "zh-CN"
         ChineseTraditional -> "zh-TW"
@@ -166,9 +177,12 @@         Italian            -> "it"
         Japanese           -> "ja"
         Kannada            -> "kn"
+        Kazakh             -> "kk"
         Korean             -> "ko"
+        Kyrgyz             -> "ky"
         Latvian            -> "lv"
         Lithuanian         -> "lt"
+        Macedonian         -> "mk"
         Malayalam          -> "ml"
         Marathi            -> "mr"
         Norwegian          -> "no"
@@ -176,6 +190,7 @@         Portuguese         -> "pt"
         PortugueseBrazil   -> "pt-BR"
         PortuguesePortugal -> "pt-PT"
+        Punjabi            -> "pa"
         Romanian           -> "ro"
         Russian            -> "ru"
         Serbian            -> "sr"
@@ -189,6 +204,7 @@         Thai               -> "th"
         Turkish            -> "tr"
         Ukrainian          -> "uk"
+        Uzbek              -> "uz"
         Vietnamese         -> "vi"
 
 -- | Region: a ccTLD (country code top level domain).
@@ -702,6 +718,6 @@         UK -> "uk" -- United Kingdom of Great Britain and Northern Ireland
         EU -> "eu" -- European Union
 
--- | The base URL for the Google Maps APIs.
+-- | The base URL for the Google Maps Platform APIs.
 googleMapsApis :: BaseUrl
 googleMapsApis = BaseUrl Https "maps.googleapis.com" 443 "/maps/api"
+ src/Web/Google/Maps/Static.hs view
@@ -0,0 +1,675 @@+{-# LANGUAGE CPP                        #-}
+{-# LANGUAGE DataKinds                  #-}
+{-# LANGUAGE FlexibleInstances          #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE OverloadedStrings          #-}
+{-# LANGUAGE TypeOperators              #-}
+
+-- |
+-- Module      : Web.Google.Maps.Static
+-- Description : Bindings to the Google Maps Static API (formerly Static Maps
+--               API)
+-- Copyright   : (c) Mike Pilgrem 2017, 2018
+-- Maintainer  : public@pilgrem.com
+-- Stability   : experimental
+--
+-- This module has no connection with Google Inc. or its affiliates.
+--
+-- The <https://developers.google.com/maps/documentation/maps-static/intro Google Maps Static API>
+-- returns a map as an image via an HTTP request. This library provides bindings
+-- in Haskell to that API (version 2).
+--
+-- NB: The use of the Google Maps Static API services is subject to the
+-- <https://cloud.google.com/maps-platform/terms/ Google Maps Platform Terms of Service>,
+-- which terms restrict the use of content. End Users' use of Google Maps is
+-- subject to the then-current Google Maps/Google Earth Additional Terms of
+-- Service at <https://maps.google.com/help/terms_maps.html> and Google Privacy
+-- Policy at <https://www.google.com/policies/privacy/>.
+--
+-- The following are not yet implemented: non-PNG image formats; and encoded
+-- polyline paths.
+--
+-- The code below is an example console application to test the use of the
+-- library with the Google Maps Static API.
+--
+-- > {-# LANGUAGE OverloadedStrings #-}
+-- >
+-- > module Main (main) where
+-- >
+-- > import Data.Maybe (fromJust)
+-- > import Graphics.Gloss (Display (..), display, white)  -- package gloss
+-- > import Graphics.Gloss.Juicy (fromDynamicImage)        -- package gloss-juicy
+-- > import Network.HTTP.Client (newManager)
+-- > import Network.HTTP.Client.TLS (tlsManagerSettings)
+-- > import Web.Google.Maps.Static (Center (..), Key (..), Location (..), Size (..),
+-- >     staticmap, StaticmapResponse (..), Zoom (..))
+-- >
+-- > main :: IO ()
+-- > main = do
+-- >   putStrLn $ "A test of the Google Maps Static API.\nNB: The use of " ++
+-- >     "the API services is subject to the Google Maps Platform Terms of " ++
+-- >     "Serivce at https://cloud.google.com/maps-platform/terms/.\n"
+-- >   mgr <- newManager tlsManagerSettings
+-- >   let apiKey = Key "<REPLACE_THIS_WITH_YOUR_ACTUAL_GOOGLE_API_KEY>"
+-- >       -- If using a digital signature ...
+-- >       secret = Just $ Secret
+-- >         "<REPLACE_THIS_WITH_YOUR_ACTUAL_GOOGLE_URL_SIGNING_SECRET>"
+-- >       center = Just $ Center (Location 42.165950 (-71.362015))
+-- >       zoom   = Just $ Zoom 17
+-- >       w      = 400
+-- >       h      = 400
+-- >       size   = Size w h
+-- >   result <- staticmap mgr apiKey secret center zoom size Nothing Nothing
+-- >               [] Nothing Nothing Nothing [] [] Nothing
+-- >   case result of
+-- >     Right response -> do
+-- >       let picture = fromJust $ fromDynamicImage response
+-- >           title   = "Test Google Maps Static API"
+-- >           window  = InWindow title (w, h) (10, 10)
+-- >       display window white picture
+-- >     Left err -> putStrLn $ "Error! Result:\n" ++ show err
+module Web.Google.Maps.Static
+       ( -- * Functions
+         staticmap
+         -- * API
+       , GoogleMapsStaticAPI
+       , api
+         -- * Types
+       , Key               (..)
+       , Secret            (..)
+       , Signature         (..)
+       , Center            (..)
+       , Location          (..)
+       , LatLng            (..)
+       , Address           (..)
+       , Zoom              (..)
+       , Size              (..)
+       , Scale             (..)
+       , Format            (..)
+       , MapStyle          (..)
+       , Feature           (..)
+       , Element           (..)
+       , MapStyleOp        (..)
+       , Visibility        (..)
+       , MapType           (..)
+       , Language          (..)
+       , Region            (..)
+       , Markers           (..)
+       , MarkerStyle       (..)
+       , MarkerSize        (..)
+       , MarkerColor       (..)
+       , MarkerLabel       (..)
+       , StdColor          (..)
+       , URI               (..)
+       , URIAuth           (..)
+       , Anchor            (..)
+       , StdAnchor         (..)
+       , Path              (..)
+       , PathStyle         (..)
+       , PathWeight        (..)
+       , PathColor         (..)
+       , PathGeodesic      (..)
+       , Visible           (..)
+       , StaticmapResponse
+       ) where
+
+import Codec.Picture.Types (DynamicImage (..))
+import Crypto.Hash.Algorithms (SHA1)
+import Crypto.MAC.HMAC (HMAC, hmac)
+import Data.ByteArray (convert)
+import Data.ByteString.Base64.URL (decode, encode)
+import Data.ByteString.UTF8 as UTF8 (fromString)
+import Data.List (intersperse)
+import Data.Maybe (catMaybes)
+import Data.Proxy (Proxy (..))
+import Data.Text (Text)
+import qualified Data.Text as T (append, concat, pack)
+import Data.Text.Encoding (decodeUtf8, encodeUtf8)
+import Data.Word (Word8)
+import Network.HTTP.Client (Manager)
+import Network.URI (URI (..), URIAuth (..), uriToString)
+import Servant.API ((:>), Get, QueryParam, QueryParams, safeLink,
+    ToHttpApiData (..))
+import Servant.Client (BaseUrl (..), client, ClientEnv (ClientEnv), ClientM,
+    runClientM, ServantError)
+import Servant.JuicyPixels (PNG)
+import Servant.Links (LinkArrayElementStyle (..), linkURI')
+import Text.Bytedump (hexString)
+import Web.Google.Maps.Common (Address (..), googleMapsApis, Key (..),
+    Language (..), LatLng (..), Location (..), Region (..))
+
+-- | Secret for digital signature
+newtype Secret = Secret Text
+    deriving (Eq, Show)
+
+-- | Signature
+newtype Signature = Signature Text
+    deriving (Eq, Show, ToHttpApiData)
+
+-- | Center of the map: not required if the map includes markers or paths.
+newtype Center = Center Location
+    deriving (Eq, Show, ToHttpApiData)
+
+-- | Zoom level: the lowest level, in which the whole world can be seen, is 0.
+-- Each succeeding level doubles the precision. Not required if the map includes
+-- markers or paths.
+newtype Zoom = Zoom Int
+    deriving (Eq, Show, ToHttpApiData)
+
+-- | Size in pixels: there are maximum allowable values.
+data Size = Size
+    { width  :: Int
+    , height :: Int
+    } deriving (Eq, Show)
+
+instance ToHttpApiData Size where
+    toUrlPiece (Size width' height') =
+        T.pack (show width' ++ "x" ++ show height')
+
+-- | Scale
+data Scale
+    = Single     -- ^ The default value.
+    | Double
+    | Quadruple
+    deriving (Eq, Show)
+
+instance ToHttpApiData Scale where
+    toUrlPiece scale = case scale of
+        Single    -> "1"
+        Double    -> "2"
+        Quadruple -> "4"
+
+-- | Image format
+data Format
+    = Png8   -- ^ The default value.
+    | Png32
+    deriving (Eq, Show)
+
+instance ToHttpApiData Format where
+    toUrlPiece format = case format of
+        Png8  -> "png8"
+        Png32 -> "png32"
+
+-- | MapStyle
+data MapStyle = MapStyle (Maybe Feature) (Maybe Element) [MapStyleOp]
+    deriving (Eq, Show)
+
+instance ToHttpApiData MapStyle where
+    toUrlPiece (MapStyle featureOpt elementOpt ops) =
+        T.concat $ intersperse "|" $ catMaybes [featureUrl, elementUrl] ++
+            [opsUrl]
+      where
+        featureUrl = T.append "feature:" . toUrlPiece <$> featureOpt
+        elementUrl = T.append "element:" . toUrlPiece <$> elementOpt
+        opsUrl = toUrlPiece ops
+
+-- | Map feature
+data Feature
+    = AllFeatures
+    | Administrative
+    | AdministrativeCountry
+    | AdministrativeLandParcel
+    | AdministrativeLocality
+    | AdministrativeNeighborhood
+    | AdministrativeProvince
+    | Landscape
+    | LandscapeManMade
+    | LandscapeNatural
+    | LandscapeNaturalLandcover
+    | LandscapeNaturalTerrain
+    | Poi
+    | PoiAttraction
+    | PoiBusiness
+    | PoiGovernment
+    | PoiMedical
+    | PoiPark
+    | PoiPlaceOfWorship
+    | PoiSchool
+    | PoiSportsComplex
+    | Road
+    | RoadArterial
+    | RoadHighway
+    | RoadHighwayControlledAccess
+    | RoadLocal
+    | Transit
+    | TransitLine
+    | TransitStation
+    | TransitStationAirport
+    | TransitStationBus
+    | TransitStationRail
+    | Water
+    deriving (Eq, Show)
+
+instance ToHttpApiData Feature where
+    toUrlPiece feature = case feature of
+        AllFeatures                 -> "all"
+        Administrative              -> "administrative"
+        AdministrativeCountry       -> "administrative.country"
+        AdministrativeLandParcel    -> "administrative.land_parcel"
+        AdministrativeLocality      -> "administrative.locality"
+        AdministrativeNeighborhood  -> "administrative.neighborhood"
+        AdministrativeProvince      -> "administrative.province"
+        Landscape                   -> "landscape"
+        LandscapeManMade            -> "landscape.man_made"
+        LandscapeNatural            -> "landscape.natural"
+        LandscapeNaturalLandcover   -> "landscape.landcover"
+        LandscapeNaturalTerrain     -> "landscape.terrain"
+        Poi                         -> "poi"
+        PoiAttraction               -> "poi.attraction"
+        PoiBusiness                 -> "poi.business"
+        PoiGovernment               -> "poi.government"
+        PoiMedical                  -> "poi.medical"
+        PoiPark                     -> "poi.park"
+        PoiPlaceOfWorship           -> "poi.place_of_worship"
+        PoiSchool                   -> "poi.school"
+        PoiSportsComplex            -> "poi.sports_complex"
+        Road                        -> "road"
+        RoadArterial                -> "road.arterial"
+        RoadHighway                 -> "road.highway"
+        RoadHighwayControlledAccess -> "road.controlled_access"
+        RoadLocal                   -> "road.local"
+        Transit                     -> "transit"
+        TransitLine                 -> "transit.line"
+        TransitStation              -> "transit.station"
+        TransitStationAirport       -> "transit.station.airport"
+        TransitStationBus           -> "transit.station.bus"
+        TransitStationRail          -> "transit.station.rail"
+        Water                       -> "water"
+
+-- | Feature element
+data Element
+    = AllElements
+    | AllGeometry
+    | GeometryFill
+    | GeometryStroke
+    | AllLabels
+    | LabelsIcon
+    | LabelsText
+    | LabelsTextFill
+    | LabelsTextStroke
+    deriving (Eq, Show)
+
+instance ToHttpApiData Element where
+    toUrlPiece element = case element of
+        AllElements      -> "all"
+        AllGeometry      -> "geometry"
+        GeometryFill     -> "geometry.fill"
+        GeometryStroke   -> "geometry.stroke"
+        AllLabels        -> "labels"
+        LabelsIcon       -> "labels.icon"
+        LabelsText       -> "labels.text"
+        LabelsTextFill   -> "labels.text.fill"
+        LabelsTextStroke -> "labels.text.stroke"
+
+-- | Map style operation
+data MapStyleOp
+    = StyleHue Word8 Word8 Word8
+    | StyleLightness Double
+    | StyleSaturation Double
+    | StyleGamma Double
+    | StyleInvertLightness Bool
+    | StyleVisibility Visibility
+    | StyleColor Word8 Word8 Word8
+    | StyleWeight Int
+    deriving (Eq, Show)
+
+instance ToHttpApiData MapStyleOp where
+    toUrlPiece mapStyleOp
+        | StyleHue r g b <- mapStyleOp
+          = T.pack $ "hue:0x" ++ hexString r ++ hexString g ++ hexString b
+        | StyleLightness l <- mapStyleOp
+          = T.concat ["lightness:", toUrlPiece l]
+        | StyleSaturation s <- mapStyleOp
+          = T.concat ["saturation:", toUrlPiece s]
+        | StyleGamma g <- mapStyleOp
+          = T.concat ["gamma:", toUrlPiece g]
+        | StyleInvertLightness i <- mapStyleOp
+          = T.concat ["invert_lightness:", toUrlPiece i]
+        | StyleVisibility e <- mapStyleOp
+          = T.concat ["visibility:", toUrlPiece e]
+        | StyleColor r g b <- mapStyleOp
+          = T.pack $ "color:0x" ++ hexString r ++ hexString g ++ hexString b
+        | StyleWeight w <- mapStyleOp
+          = T.concat ["weight:", toUrlPiece w]
+
+instance ToHttpApiData [MapStyleOp] where
+    toUrlPiece ops = T.concat $ intersperse "|" $ map toUrlPiece ops
+
+-- | Visibility
+data Visibility
+    = On
+    | Off
+    | Simplified  -- ^ Removes some, not all, style features
+    deriving (Eq, Show)
+
+instance ToHttpApiData Visibility where
+    toUrlPiece visibility = case visibility of
+        On         -> "on"
+        Off        -> "off"
+        Simplified -> "simplified"
+
+-- | Map type
+data MapType
+    = RoadMap    -- ^ The default value.
+    | Satellite
+    | Hybrid
+    | Terrain
+    deriving (Eq, Show)
+
+instance ToHttpApiData MapType where
+    toUrlPiece mapType = case mapType of
+        RoadMap   -> "roadmap"
+        Satellite -> "satellite"
+        Hybrid    -> "hybrid"
+        Terrain   -> "terrain"
+
+-- | Markers
+data Markers = Markers (Maybe MarkerStyle) [Location]
+    deriving (Eq, Show)
+
+instance ToHttpApiData Markers where
+    toUrlPiece (Markers markerStyleOpt ls)
+        | Nothing <- markerStyleOpt
+          = toUrlPiece ls
+        | Just (StdMarkerStyle Nothing Nothing Nothing) <- markerStyleOpt
+          = toUrlPiece ls
+        | Just markerStyle <- markerStyleOpt
+          = case ls of
+                [] -> toUrlPiece markerStyle
+                _  -> T.concat [toUrlPiece markerStyle, "|", toUrlPiece ls]
+
+-- | Marker style
+data MarkerStyle
+    = StdMarkerStyle
+          { markerSize  :: Maybe MarkerSize
+          , markerColor :: Maybe MarkerColor
+          , markerLabel :: Maybe MarkerLabel
+          }
+    | CustomIcon
+          { icon   :: URI
+          , anchor :: Maybe Anchor
+          }
+    deriving (Eq, Show)
+
+instance ToHttpApiData MarkerStyle where
+    toUrlPiece markerStyle
+        | StdMarkerStyle ms mc ml <- markerStyle
+          = let size'  = T.append "size:" . toUrlPiece <$> ms
+                color' = T.append "color:" . toUrlPiece <$> mc
+                label' = T.append "label:" . toUrlPiece <$> ml
+                opts     = catMaybes [size', color', label']
+            in  T.concat $ intersperse "|" opts
+        | CustomIcon url ma <- markerStyle
+          = let icon' = T.concat ["icon:", toUrlPiece $ uriToString id url ""]
+            in  case ma of
+                    Nothing -> icon'
+                    Just a -> T.concat [icon', "|", "anchor:", toUrlPiece a]
+
+-- | Marker size
+data MarkerSize
+    = Tiny
+    | Mid
+    | Small
+    deriving (Eq, Show)
+
+instance ToHttpApiData MarkerSize where
+    toUrlPiece markerSize' = case markerSize' of
+        Tiny  -> "tiny"
+        Mid   -> "mid"
+        Small -> "small"
+
+-- | Marker colour
+data MarkerColor
+    = MarkerColor Word8 Word8 Word8
+    | StdMarkerColor StdColor
+    deriving (Eq, Show)
+
+instance ToHttpApiData MarkerColor where
+    toUrlPiece (MarkerColor r g b) = T.pack $ "0x" ++ hexString r ++ hexString g
+        ++ hexString b
+    toUrlPiece (StdMarkerColor stdColor) = toUrlPiece stdColor
+
+-- | Standard colours
+data StdColor
+    = Black
+    | Brown
+    | Green
+    | Purple
+    | Yellow
+    | Blue
+    | Gray
+    | Orange
+    | Red
+    | White
+    deriving (Eq, Show)
+
+instance ToHttpApiData StdColor where
+    toUrlPiece stdColor = case stdColor of
+        Black  -> "black"
+        Brown  -> "brown"
+        Green  -> "green"
+        Purple -> "purple"
+        Yellow -> "yellow"
+        Blue   -> "blue"
+        Gray   -> "gray"
+        Orange -> "orange"
+        Red    -> "red"
+        White  -> "white"
+
+-- | Marker label character
+newtype MarkerLabel = MarkerLabel Char
+    deriving (Eq, Show, ToHttpApiData)
+
+-- | Anchor
+data Anchor
+    = AnchorPoint Int Int
+    | StdAnchor StdAnchor
+    deriving (Eq, Show)
+
+instance ToHttpApiData Anchor where
+    toUrlPiece anchor'
+        | AnchorPoint x y <- anchor'
+          = T.pack (show x ++ "," ++ show y)
+        | StdAnchor stdAnchor <- anchor'
+          = toUrlPiece stdAnchor
+
+-- | Standard anchor points
+data StdAnchor
+    = AnchorTop
+    | AnchorBottom
+    | AnchorLeft
+    | AnchorRight
+    | AnchorCenter
+    | AnchorTopLeft
+    | AnchorTopRight
+    | AnchorBottomLeft
+    | AnchorBottomRight
+    deriving (Eq, Show)
+
+instance ToHttpApiData StdAnchor where
+    toUrlPiece stdAnchor = case stdAnchor of
+        AnchorTop         -> "top"
+        AnchorBottom      -> "bottom"
+        AnchorLeft        -> "left"
+        AnchorRight       -> "right"
+        AnchorCenter      -> "center"
+        AnchorTopLeft     -> "topleft"
+        AnchorTopRight    -> "topright"
+        AnchorBottomLeft  -> "bottomleft"
+        AnchorBottomRight -> "bottomright"
+
+-- | Path
+data Path = Path (Maybe PathStyle) [Location]
+    deriving (Eq, Show)
+
+instance ToHttpApiData Path where
+    toUrlPiece (Path pathStyleOpt ls)
+        | Nothing <- pathStyleOpt
+          = toUrlPiece ls
+        | Just (PathStyle Nothing Nothing Nothing Nothing) <- pathStyleOpt
+          = toUrlPiece ls
+        | Just pathStyle <- pathStyleOpt
+          = case ls of
+                [] -> toUrlPiece pathStyle
+                _  -> T.concat [toUrlPiece pathStyle, "|", toUrlPiece ls]
+
+-- | Path style: a geodesic path follows the curvature of the Earth.
+data PathStyle = PathStyle
+    { pathWeight     :: Maybe PathWeight    -- ^ The default value is 5.
+    , pathColor      :: Maybe PathColor
+    , pathFillColor  :: Maybe PathColor
+    , pathGeodesic   :: Maybe PathGeodesic  -- ^ The default value is false.
+    } deriving (Eq, Show)
+
+instance ToHttpApiData PathStyle where
+    toUrlPiece (PathStyle mw mc mfc mg) =
+        T.concat $ intersperse "|" opts
+      where
+        weightUrl    = T.append "weight:" . toUrlPiece <$> mw
+        colorUrl     = T.append "color:" . toUrlPiece <$> mc
+        fillColorUrl = T.append "fillcolor:" . toUrlPiece <$> mfc
+        geodesicUrl  = T.append "geodesic:" . toUrlPiece <$> mg
+        opts         = catMaybes [weightUrl, colorUrl, fillColorUrl,
+                           geodesicUrl]
+
+-- | Path weight: in pixels.
+newtype PathWeight = PathWeight Int
+    deriving (Eq, Show, ToHttpApiData)
+
+-- | Path colour
+data PathColor
+    = PathColor Word8 Word8 Word8
+    | PathColorAlpha Word8 Word8 Word8 Word8
+    | StdPathColor StdColor
+    deriving (Eq, Show)
+
+instance ToHttpApiData PathColor where
+    toUrlPiece (PathColor r g b) = T.pack $ "0x" ++ hexString r ++ hexString g
+        ++ hexString b
+    toUrlPiece (PathColorAlpha r g b a) = T.pack $ "0x" ++ hexString r ++
+        hexString g ++ hexString b ++ hexString a
+    toUrlPiece (StdPathColor stdColor) = toUrlPiece stdColor
+
+-- | Path is geodesic
+newtype PathGeodesic = PathGeodesic Bool
+    deriving (Eq, Show, ToHttpApiData)
+
+-- | Visible locations
+newtype Visible = Visible [Location]
+    deriving (Eq, Show, ToHttpApiData)
+
+-- | Google Maps Static API
+type GoogleMapsStaticAPI
+    =  "staticmap"
+    :> QueryParam  "key"       Key
+    :> QueryParam  "center"    Center
+    :> QueryParam  "zoom"      Zoom
+    :> QueryParam  "size"      Size
+    :> QueryParam  "scale"     Scale
+    :> QueryParam  "format"    Format
+    :> QueryParams "style"     MapStyle
+    :> QueryParam  "maptype"   MapType
+    :> QueryParam  "language"  Language
+    :> QueryParam  "region"    Region
+    :> QueryParams "markers"   Markers
+    :> QueryParams "path"      Path
+    :> QueryParam  "visible"   Visible
+    :> QueryParam  "signature" Signature
+    :> Get '[PNG] StaticmapResponse
+
+-- | StaticmapResponse
+type StaticmapResponse = DynamicImage
+
+-- | API type
+api :: Proxy GoogleMapsStaticAPI
+api = Proxy
+
+staticmap'
+    :: Maybe Key
+    -> Maybe Center
+    -> Maybe Zoom
+    -> Maybe Size
+    -> Maybe Scale
+    -> Maybe Format
+    -> [MapStyle]
+    -> Maybe MapType
+    -> Maybe Language
+    -> Maybe Region
+    -> [Markers]
+    -> [Path]
+    -> Maybe Visible
+    -> Maybe Signature
+    -> ClientM StaticmapResponse
+staticmap' = client api
+
+-- | Retrieve a static map. NB: The use of the Google Maps Static API services
+-- is subject to the
+-- <https://cloud.google.com/maps-platform/terms/ Google Maps Platform Terms of Service>.
+-- End Users' use of Google Maps is subject to the then-current Google
+-- Maps/Google Earth Additional Terms of Service at
+-- <https://maps.google.com/help/terms_maps.html> and Google Privacy Policy at
+-- <https://www.google.com/policies/privacy/>.
+staticmap
+    :: Manager
+    -> Key
+    -> Maybe Secret
+    -> Maybe Center
+    -> Maybe Zoom
+    -> Size
+    -> Maybe Scale
+    -> Maybe Format
+    -> [MapStyle]
+    -> Maybe MapType
+    -> Maybe Language
+    -> Maybe Region
+    -> [Markers]
+    -> [Path]
+    -> Maybe Visible
+    -> IO (Either ServantError StaticmapResponse)
+staticmap
+    mgr
+    key
+    secretOpt
+    centerOpt
+    zoomOpt
+    size
+    scaleOpt
+    formatOpt
+    mapStyles
+    mapTypeOpt
+    languageOpt
+    regionOpt
+    markerss
+    paths
+    visibleOpt
+    = case secretOpt of
+          Nothing -> runClientM (eval staticmap' Nothing)
+-- CookieJar supported from servant-client-0.13
+#if MIN_VERSION_servant_client(0,13,0)
+                                (ClientEnv mgr googleMapsApis Nothing)
+#else
+                                (ClientEnv mgr googleMapsApis)
+#endif
+          Just secret -> do
+              let url = linkURI $ eval (safeLink api api) Nothing
+                  signatureOpt = sign secret googleMapsApis url
+              runClientM (eval staticmap' signatureOpt)
+-- CookieJar supported from servant-client-0.13
+#if MIN_VERSION_servant_client(0,13,0)
+                         (ClientEnv mgr googleMapsApis Nothing)
+#else
+                         (ClientEnv mgr googleMapsApis)
+#endif
+        where
+          linkURI = linkURI' LinkArrayElementPlain
+          eval f = f (Just key) centerOpt zoomOpt (Just size) scaleOpt formatOpt
+                     mapStyles mapTypeOpt languageOpt regionOpt markerss paths
+                     visibleOpt
+
+sign :: Secret -> BaseUrl -> URI -> Maybe Signature
+sign (Secret secret) baseUrl url = do
+    secret' <- either (const Nothing) Just (decode $ encodeUtf8 secret)
+    let url'       = UTF8.fromString $ baseUrlPath baseUrl ++ "/" ++ uriToString id url ""
+        signature  = hmac secret' url' :: HMAC SHA1
+        signature' = decodeUtf8 $ encode $ convert signature
+    return $ Signature signature'
− src/Web/Google/Static/Maps.hs
@@ -1,666 +0,0 @@-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE DataKinds                  #-}
-{-# LANGUAGE FlexibleInstances          #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE OverloadedStrings          #-}
-{-# LANGUAGE TypeOperators              #-}
-
--- |
--- Module      : Web.Google.Static.Maps
--- Description : Bindings to the Google Static Maps API
--- Copyright   : (c) Mike Pilgrem 2017, 2018
--- Maintainer  : public@pilgrem.com
--- Stability   : experimental
---
--- This module has no connection with Google Inc. or its affiliates.
---
--- The <https://developers.google.com/maps/documentation/static-maps/intro Google Static Maps API>
--- returns a map as an image via an HTTP request. This library provides bindings
--- in Haskell to that API (version 2).
---
--- NB: The use of the Google Static Maps API services is subject to the
--- <https://developers.google.com/maps/terms Google Maps APIs Terms of Service>,
--- which terms restrict the use of content.
---
--- The following are not yet implemented: non-PNG image formats; and encoded
--- polyline paths.
---
--- The code below is an example console application to test the use of the
--- library with the Google Static Maps API.
---
--- > {-# LANGUAGE OverloadedStrings #-}
--- >
--- > module Main (main) where
--- >
--- > import Data.Maybe (fromJust)
--- > import Graphics.Gloss (Display (..), display, white)  -- package gloss
--- > import Graphics.Gloss.Juicy (fromDynamicImage)        -- package gloss-juicy
--- > import Network.HTTP.Client (newManager)
--- > import Network.HTTP.Client.TLS (tlsManagerSettings)
--- > import Web.Google.Static.Maps (Center (..), Key (..), Location (..), Size (..),
--- >     staticmap, StaticmapResponse (..), Zoom (..))
--- >
--- > main :: IO ()
--- > main = do
--- >   putStrLn $ "A test of the Google Static Maps API.\nNB: The use of " ++
--- >     "the API services is subject to the Google Maps APIs Terms of " ++
--- >     "Serivce at https://developers.google.com/maps/terms.\n"
--- >   mgr <- newManager tlsManagerSettings
--- >   let apiKey = Key "<REPLACE_THIS_WITH_YOUR_ACTUAL_GOOGLE_API_KEY>"
--- >       -- If using a digital signature ...
--- >       secret = Just $ Secret
--- >         "<REPLACE_THIS_WITH_YOUR_ACTUAL_GOOGLE_URL_SIGNING_SECRET>"
--- >       center = Just $ Center (Location 42.165950 (-71.362015))
--- >       zoom   = Just $ Zoom 17
--- >       w      = 400
--- >       h      = 400
--- >       size   = Size w h
--- >   result <- staticmap mgr apiKey secret center zoom size Nothing Nothing
--- >               [] Nothing Nothing Nothing [] [] Nothing
--- >   case result of
--- >     Right response -> do
--- >       let picture = fromJust $ fromDynamicImage response
--- >           title   = "Test Google Static Maps API"
--- >           window  = InWindow title (w, h) (10, 10)
--- >       display window white picture
--- >     Left err -> putStrLn $ "Error! Result:\n" ++ show err
-module Web.Google.Static.Maps
-       ( -- * Functions
-         staticmap
-         -- * API
-       , GoogleStaticMapsAPI
-       , api
-         -- * Types
-       , Key               (..)
-       , Secret            (..)
-       , Signature         (..)
-       , Center            (..)
-       , Location          (..)
-       , LatLng            (..)
-       , Address           (..)
-       , Zoom              (..)
-       , Size              (..)
-       , Scale             (..)
-       , Format            (..)
-       , MapStyle          (..)
-       , Feature           (..)
-       , Element           (..)
-       , MapStyleOp        (..)
-       , Visibility        (..)
-       , MapType           (..)
-       , Language          (..)
-       , Region            (..)
-       , Markers           (..)
-       , MarkerStyle       (..)
-       , MarkerSize        (..)
-       , MarkerColor       (..)
-       , MarkerLabel       (..)
-       , StdColor          (..)
-       , URI               (..)
-       , URIAuth           (..)
-       , Anchor            (..)
-       , StdAnchor         (..)
-       , Path              (..)
-       , PathStyle         (..)
-       , PathWeight        (..)
-       , PathColor         (..)
-       , PathGeodesic      (..)
-       , Visible           (..)
-       , StaticmapResponse
-       ) where
-
-import Codec.Picture.Types (DynamicImage (..))
-import Crypto.Hash.Algorithms (SHA1)
-import Crypto.MAC.HMAC (HMAC, hmac)
-import Data.ByteArray (convert)
-import Data.ByteString.Base64.URL (decode, encode)
-import Data.ByteString.UTF8 as UTF8 (fromString)
-import Data.List (intersperse)
-import Data.Maybe (catMaybes)
-import Data.Proxy (Proxy (..))
-import Data.Text (Text)
-import qualified Data.Text as T (append, concat, pack)
-import Data.Text.Encoding (decodeUtf8, encodeUtf8)
-import Data.Word (Word8)
-import Network.HTTP.Client (Manager)
-import Network.URI (URI (..), URIAuth (..), uriToString)
-import Servant.API ((:>), Get, QueryParam, QueryParams, safeLink,
-    ToHttpApiData (..))
-import Servant.Client (BaseUrl (..), client, ClientEnv (ClientEnv), ClientM,
-    runClientM, ServantError)
-import Servant.JuicyPixels (PNG)
-import Servant.Links (LinkArrayElementStyle (..), linkURI')
-import Text.Bytedump (hexString)
-import Web.Google.Maps.Common (Address (..), googleMapsApis, Key (..),
-    Language (..), LatLng (..), Location (..), Region (..))
-
--- | Secret for digital signature
-newtype Secret = Secret Text
-    deriving (Eq, Show)
-
--- | Signature
-newtype Signature = Signature Text
-    deriving (Eq, Show, ToHttpApiData)
-
--- | Center of the map: not required if the map includes markers or paths.
-newtype Center = Center Location
-    deriving (Eq, Show, ToHttpApiData)
-
--- | Zoom level: the lowest level, in which the whole world can be seen, is 0.
--- Each succeeding level doubles the precision. Not required if the map includes
--- markers or paths.
-newtype Zoom = Zoom Int
-    deriving (Eq, Show, ToHttpApiData)
-
--- | Size in pixels: there are maximum allowable values.
-data Size = Size
-    { width  :: Int
-    , height :: Int
-    } deriving (Eq, Show)
-
-instance ToHttpApiData Size where
-    toUrlPiece (Size width' height') =
-        T.pack (show width' ++ "x" ++ show height')
-
--- | Scale
-data Scale
-    = Single     -- ^ The default value.
-    | Double
-    | Quadruple
-    deriving (Eq, Show)
-
-instance ToHttpApiData Scale where
-    toUrlPiece scale = case scale of
-        Single    -> "1"
-        Double    -> "2"
-        Quadruple -> "4"
-
--- | Image format
-data Format
-    = Png8   -- ^ The default value.
-    | Png32
-    deriving (Eq, Show)
-
-instance ToHttpApiData Format where
-    toUrlPiece format = case format of
-        Png8  -> "png8"
-        Png32 -> "png32"
-
--- | MapStyle
-data MapStyle = MapStyle (Maybe Feature) (Maybe Element) [MapStyleOp]
-    deriving (Eq, Show)
-
-instance ToHttpApiData MapStyle where
-    toUrlPiece (MapStyle featureOpt elementOpt ops) =
-        T.concat $ intersperse "|" $ catMaybes [featureUrl, elementUrl] ++
-            [opsUrl]
-      where
-        featureUrl = T.append "feature:" . toUrlPiece <$> featureOpt
-        elementUrl = T.append "element:" . toUrlPiece <$> elementOpt
-        opsUrl = toUrlPiece ops
-
--- | Map feature
-data Feature
-    = AllFeatures
-    | Administrative
-    | AdministrativeCountry
-    | AdministrativeLandParcel
-    | AdministrativeLocality
-    | AdministrativeNeighborhood
-    | AdministrativeProvince
-    | Landscape
-    | LandscapeManMade
-    | LandscapeNatural
-    | LandscapeNaturalLandcover
-    | LandscapeNaturalTerrain
-    | Poi
-    | PoiAttraction
-    | PoiBusiness
-    | PoiGovernment
-    | PoiMedical
-    | PoiPark
-    | PoiPlaceOfWorship
-    | PoiSchool
-    | PoiSportsComplex
-    | Road
-    | RoadArterial
-    | RoadHighway
-    | RoadHighwayControlledAccess
-    | RoadLocal
-    | Transit
-    | TransitLine
-    | TransitStation
-    | TransitStationAirport
-    | TransitStationBus
-    | TransitStationRail
-    | Water
-    deriving (Eq, Show)
-
-instance ToHttpApiData Feature where
-    toUrlPiece feature = case feature of
-        AllFeatures                 -> "all"
-        Administrative              -> "administrative"
-        AdministrativeCountry       -> "administrative.country"
-        AdministrativeLandParcel    -> "administrative.land_parcel"
-        AdministrativeLocality      -> "administrative.locality"
-        AdministrativeNeighborhood  -> "administrative.neighborhood"
-        AdministrativeProvince      -> "administrative.province"
-        Landscape                   -> "landscape"
-        LandscapeManMade            -> "landscape.man_made"
-        LandscapeNatural            -> "landscape.natural"
-        LandscapeNaturalLandcover   -> "landscape.landcover"
-        LandscapeNaturalTerrain     -> "landscape.terrain"
-        Poi                         -> "poi"
-        PoiAttraction               -> "poi.attraction"
-        PoiBusiness                 -> "poi.business"
-        PoiGovernment               -> "poi.government"
-        PoiMedical                  -> "poi.medical"
-        PoiPark                     -> "poi.park"
-        PoiPlaceOfWorship           -> "poi.place_of_worship"
-        PoiSchool                   -> "poi.school"
-        PoiSportsComplex            -> "poi.sports_complex"
-        Road                        -> "road"
-        RoadArterial                -> "road.arterial"
-        RoadHighway                 -> "road.highway"
-        RoadHighwayControlledAccess -> "road.controlled_access"
-        RoadLocal                   -> "road.local"
-        Transit                     -> "transit"
-        TransitLine                 -> "transit.line"
-        TransitStation              -> "transit.station"
-        TransitStationAirport       -> "transit.station.airport"
-        TransitStationBus           -> "transit.station.bus"
-        TransitStationRail          -> "transit.station.rail"
-        Water                       -> "water"
-
--- | Feature element
-data Element
-    = AllElements
-    | AllGeometry
-    | GeometryFill
-    | GeometryStroke
-    | AllLabels
-    | LabelsIcon
-    | LabelsText
-    | LabelsTextFill
-    | LabelsTextStroke
-    deriving (Eq, Show)
-
-instance ToHttpApiData Element where
-    toUrlPiece element = case element of
-        AllElements      -> "all"
-        AllGeometry      -> "geometry"
-        GeometryFill     -> "geometry.fill"
-        GeometryStroke   -> "geometry.stroke"
-        AllLabels        -> "labels"
-        LabelsIcon       -> "labels.icon"
-        LabelsText       -> "labels.text"
-        LabelsTextFill   -> "labels.text.fill"
-        LabelsTextStroke -> "labels.text.stroke"
-
--- | Map style operation
-data MapStyleOp
-    = StyleHue Word8 Word8 Word8
-    | StyleLightness Double
-    | StyleSaturation Double
-    | StyleGamma Double
-    | StyleInvertLightness Bool
-    | StyleVisibility Visibility
-    | StyleColor Word8 Word8 Word8
-    | StyleWeight Int
-    deriving (Eq, Show)
-
-instance ToHttpApiData MapStyleOp where
-    toUrlPiece mapStyleOp
-        | StyleHue r g b <- mapStyleOp
-          = T.pack $ "hue:0x" ++ hexString r ++ hexString g ++ hexString b
-        | StyleLightness l <- mapStyleOp
-          = T.concat ["lightness:", toUrlPiece l]
-        | StyleSaturation s <- mapStyleOp
-          = T.concat ["saturation:", toUrlPiece s]
-        | StyleGamma g <- mapStyleOp
-          = T.concat ["gamma:", toUrlPiece g]
-        | StyleInvertLightness i <- mapStyleOp
-          = T.concat ["invert_lightness:", toUrlPiece i]
-        | StyleVisibility e <- mapStyleOp
-          = T.concat ["visibility:", toUrlPiece e]
-        | StyleColor r g b <- mapStyleOp
-          = T.pack $ "color:0x" ++ hexString r ++ hexString g ++ hexString b
-        | StyleWeight w <- mapStyleOp
-          = T.concat ["weight:", toUrlPiece w]
-
-instance ToHttpApiData [MapStyleOp] where
-    toUrlPiece ops = T.concat $ intersperse "|" $ map toUrlPiece ops
-
--- | Visibility
-data Visibility
-    = On
-    | Off
-    | Simplified  -- ^ Removes some, not all, style features
-    deriving (Eq, Show)
-
-instance ToHttpApiData Visibility where
-    toUrlPiece visibility = case visibility of
-        On         -> "on"
-        Off        -> "off"
-        Simplified -> "simplified"
-
--- | Map type
-data MapType
-    = RoadMap    -- ^ The default value.
-    | Satellite
-    | Hybrid
-    | Terrain
-    deriving (Eq, Show)
-
-instance ToHttpApiData MapType where
-    toUrlPiece mapType = case mapType of
-        RoadMap   -> "roadmap"
-        Satellite -> "satellite"
-        Hybrid    -> "hybrid"
-        Terrain   -> "terrain"
-
--- | Markers
-data Markers = Markers (Maybe MarkerStyle) [Location]
-    deriving (Eq, Show)
-
-instance ToHttpApiData Markers where
-    toUrlPiece (Markers markerStyleOpt ls)
-        | Nothing <- markerStyleOpt
-          = toUrlPiece ls
-        | Just (StdMarkerStyle Nothing Nothing Nothing) <- markerStyleOpt
-          = toUrlPiece ls
-        | Just markerStyle <- markerStyleOpt
-          = case ls of
-                [] -> toUrlPiece markerStyle
-                _  -> T.concat [toUrlPiece markerStyle, "|", toUrlPiece ls]
-
--- | Marker style
-data MarkerStyle
-    = StdMarkerStyle
-          { markerSize  :: Maybe MarkerSize
-          , markerColor :: Maybe MarkerColor
-          , markerLabel :: Maybe MarkerLabel
-          }
-    | CustomIcon
-          { icon   :: URI
-          , anchor :: Maybe Anchor
-          }
-    deriving (Eq, Show)
-
-instance ToHttpApiData MarkerStyle where
-    toUrlPiece markerStyle
-        | StdMarkerStyle ms mc ml <- markerStyle
-          = let size'  = T.append "size:" . toUrlPiece <$> ms
-                color' = T.append "color:" . toUrlPiece <$> mc
-                label' = T.append "label:" . toUrlPiece <$> ml
-                opts     = catMaybes [size', color', label']
-            in  T.concat $ intersperse "|" opts
-        | CustomIcon url ma <- markerStyle
-          = let icon' = T.concat ["icon:", toUrlPiece $ uriToString id url ""]
-            in  case ma of
-                    Nothing -> icon'
-                    Just a -> T.concat [icon', "|", "anchor:", toUrlPiece a]
-
--- | Marker size
-data MarkerSize
-    = Tiny
-    | Mid
-    | Small
-    deriving (Eq, Show)
-
-instance ToHttpApiData MarkerSize where
-    toUrlPiece markerSize' = case markerSize' of
-        Tiny  -> "tiny"
-        Mid   -> "mid"
-        Small -> "small"
-
--- | Marker colour
-data MarkerColor
-    = MarkerColor Word8 Word8 Word8
-    | StdMarkerColor StdColor
-    deriving (Eq, Show)
-
-instance ToHttpApiData MarkerColor where
-    toUrlPiece (MarkerColor r g b) = T.pack $ "0x" ++ hexString r ++ hexString g
-        ++ hexString b
-    toUrlPiece (StdMarkerColor stdColor) = toUrlPiece stdColor
-
--- | Standard colours
-data StdColor
-    = Black
-    | Brown
-    | Green
-    | Purple
-    | Yellow
-    | Blue
-    | Gray
-    | Orange
-    | Red
-    | White
-    deriving (Eq, Show)
-
-instance ToHttpApiData StdColor where
-    toUrlPiece stdColor = case stdColor of
-        Black  -> "black"
-        Brown  -> "brown"
-        Green  -> "green"
-        Purple -> "purple"
-        Yellow -> "yellow"
-        Blue   -> "blue"
-        Gray   -> "gray"
-        Orange -> "orange"
-        Red    -> "red"
-        White  -> "white"
-
--- | Marker label character
-newtype MarkerLabel = MarkerLabel Char
-    deriving (Eq, Show, ToHttpApiData)
-
--- | Anchor
-data Anchor
-    = AnchorPoint Int Int
-    | StdAnchor StdAnchor
-    deriving (Eq, Show)
-
-instance ToHttpApiData Anchor where
-    toUrlPiece anchor'
-        | AnchorPoint x y <- anchor'
-          = T.pack (show x ++ "," ++ show y)
-        | StdAnchor stdAnchor <- anchor'
-          = toUrlPiece stdAnchor
-
--- | Standard anchor points
-data StdAnchor
-    = AnchorTop
-    | AnchorBottom
-    | AnchorLeft
-    | AnchorRight
-    | AnchorCenter
-    | AnchorTopLeft
-    | AnchorTopRight
-    | AnchorBottomLeft
-    | AnchorBottomRight
-    deriving (Eq, Show)
-
-instance ToHttpApiData StdAnchor where
-    toUrlPiece stdAnchor = case stdAnchor of
-        AnchorTop         -> "top"
-        AnchorBottom      -> "bottom"
-        AnchorLeft        -> "left"
-        AnchorRight       -> "right"
-        AnchorCenter      -> "center"
-        AnchorTopLeft     -> "topleft"
-        AnchorTopRight    -> "topright"
-        AnchorBottomLeft  -> "bottomleft"
-        AnchorBottomRight -> "bottomright"
-
--- | Path
-data Path = Path (Maybe PathStyle) [Location]
-    deriving (Eq, Show)
-
-instance ToHttpApiData Path where
-    toUrlPiece (Path pathStyleOpt ls)
-        | Nothing <- pathStyleOpt
-          = toUrlPiece ls
-        | Just (PathStyle Nothing Nothing Nothing Nothing) <- pathStyleOpt
-          = toUrlPiece ls
-        | Just pathStyle <- pathStyleOpt
-          = case ls of
-                [] -> toUrlPiece pathStyle
-                _  -> T.concat [toUrlPiece pathStyle, "|", toUrlPiece ls]
-
--- | Path style: a geodesic path follows the curvature of the Earth.
-data PathStyle = PathStyle
-    { pathWeight     :: Maybe PathWeight    -- ^ The default value is 5.
-    , pathColor      :: Maybe PathColor
-    , pathFillColor  :: Maybe PathColor
-    , pathGeodesic   :: Maybe PathGeodesic  -- ^ The default value is false.
-    } deriving (Eq, Show)
-
-instance ToHttpApiData PathStyle where
-    toUrlPiece (PathStyle mw mc mfc mg) =
-        T.concat $ intersperse "|" opts
-      where
-        weightUrl    = T.append "weight:" . toUrlPiece <$> mw
-        colorUrl     = T.append "color:" . toUrlPiece <$> mc
-        fillColorUrl = T.append "fillcolor:" . toUrlPiece <$> mfc
-        geodesicUrl  = T.append "geodesic:" . toUrlPiece <$> mg
-        opts         = catMaybes [weightUrl, colorUrl, fillColorUrl,
-                           geodesicUrl]
-
--- | Path weight: in pixels.
-newtype PathWeight = PathWeight Int
-    deriving (Eq, Show, ToHttpApiData)
-
--- | Path colour
-data PathColor
-    = PathColor Word8 Word8 Word8
-    | PathColorAlpha Word8 Word8 Word8 Word8
-    | StdPathColor StdColor
-    deriving (Eq, Show)
-
-instance ToHttpApiData PathColor where
-    toUrlPiece (PathColor r g b) = T.pack $ "0x" ++ hexString r ++ hexString g
-        ++ hexString b
-    toUrlPiece (PathColorAlpha r g b a) = T.pack $ "0x" ++ hexString r ++
-        hexString g ++ hexString b ++ hexString a
-    toUrlPiece (StdPathColor stdColor) = toUrlPiece stdColor
-
--- | Path is geodesic
-newtype PathGeodesic = PathGeodesic Bool
-    deriving (Eq, Show, ToHttpApiData)
-
--- | Visible locations
-newtype Visible = Visible [Location]
-    deriving (Eq, Show, ToHttpApiData)
-
--- | Google Static Maps API
-type GoogleStaticMapsAPI
-    =  "staticmap"
-    :> QueryParam  "key"       Key
-    :> QueryParam  "center"    Center
-    :> QueryParam  "zoom"      Zoom
-    :> QueryParam  "size"      Size
-    :> QueryParam  "scale"     Scale
-    :> QueryParam  "format"    Format
-    :> QueryParams "style"     MapStyle
-    :> QueryParam  "maptype"   MapType
-    :> QueryParam  "language"  Language
-    :> QueryParam  "region"    Region
-    :> QueryParams "markers"   Markers
-    :> QueryParams "path"      Path
-    :> QueryParam  "visible"   Visible
-    :> QueryParam  "signature" Signature
-    :> Get '[PNG] StaticmapResponse
-
--- | StaticmapResponse
-type StaticmapResponse = DynamicImage
-
--- | API type
-api :: Proxy GoogleStaticMapsAPI
-api = Proxy
-
-staticmap'
-    :: Maybe Key
-    -> Maybe Center
-    -> Maybe Zoom
-    -> Maybe Size
-    -> Maybe Scale
-    -> Maybe Format
-    -> [MapStyle]
-    -> Maybe MapType
-    -> Maybe Language
-    -> Maybe Region
-    -> [Markers]
-    -> [Path]
-    -> Maybe Visible
-    -> Maybe Signature
-    -> ClientM StaticmapResponse
-staticmap' = client api
-
--- | Retrieve a static map. NB: The use of the Google Static Maps API services
--- is subject to the <https://developers.google.com/maps/terms Google Maps APIs Terms of Service>.
-staticmap
-    :: Manager
-    -> Key
-    -> Maybe Secret
-    -> Maybe Center
-    -> Maybe Zoom
-    -> Size
-    -> Maybe Scale
-    -> Maybe Format
-    -> [MapStyle]
-    -> Maybe MapType
-    -> Maybe Language
-    -> Maybe Region
-    -> [Markers]
-    -> [Path]
-    -> Maybe Visible
-    -> IO (Either ServantError StaticmapResponse)
-staticmap
-    mgr
-    key
-    secretOpt
-    centerOpt
-    zoomOpt
-    size
-    scaleOpt
-    formatOpt
-    mapStyles
-    mapTypeOpt
-    languageOpt
-    regionOpt
-    markerss
-    paths
-    visibleOpt
-    = case secretOpt of
-          Nothing -> runClientM (eval staticmap' Nothing)
--- CookieJar supported from servant-client-0.13
-#if MIN_VERSION_servant_client(0,13,0)
-                                (ClientEnv mgr googleMapsApis Nothing)
-#else
-                                (ClientEnv mgr googleMapsApis)
-#endif
-          Just secret -> do
-              let url = linkURI $ eval (safeLink api api) Nothing
-                  signatureOpt = sign secret googleMapsApis url
-              runClientM (eval staticmap' signatureOpt)
--- CookieJar supported from servant-client-0.13
-#if MIN_VERSION_servant_client(0,13,0)
-                         (ClientEnv mgr googleMapsApis Nothing)
-#else
-                         (ClientEnv mgr googleMapsApis)
-#endif
-        where
-          linkURI = linkURI' LinkArrayElementPlain
-          eval f = f (Just key) centerOpt zoomOpt (Just size) scaleOpt formatOpt
-                     mapStyles mapTypeOpt languageOpt regionOpt markerss paths
-                     visibleOpt
-
-sign :: Secret -> BaseUrl -> URI -> Maybe Signature
-sign (Secret secret) baseUrl url = do
-    secret' <- either (const Nothing) Just (decode $ encodeUtf8 secret)
-    let url'       = UTF8.fromString $ baseUrlPath baseUrl ++ "/" ++ uriToString id url ""
-        signature  = hmac secret' url' :: HMAC SHA1
-        signature' = decodeUtf8 $ encode $ convert signature
-    return $ Signature signature'