@@ -124,13 +124,17 @@ downloadDecl :: Global
124124 -> Method Solved
125125 -> Decl
126126downloadDecl n p api url fs m =
127− googleRequestDecl n (tycon n) rs alt p api url fs m
127+ googleRequestDecl n ty rs alt p api url fs m pat prec
128128 where
129− rs = InsType noLoc
130− (TyApp (TyCon "Rs") (TyApp (TyCon "Download") (tycon n)))
131− (TyCon "Body")
129+ ty = TyApp (TyCon "Download") (tycon n)
130+ rs = InsType noLoc (TyApp (TyCon "Rs") ty) (TyCon "Body")
132131
133− alt = Just (var "Media")
132+ alt = Just (var "AltMedia")
133+
134+ pat | _mSupportsMediaDownload m = PInfixApp PWildCard (UnQual (sym ":<|>")) (pvar "go")
135+ | otherwise = pvar "go"
136+
137+ prec = PApp (UnQual "Download") [PRec (UnQual (dname n)) [PFieldWildcard]]
134138
135139requestDecl :: Global
136140 -> Prefix
@@ -140,7 +144,7 @@ requestDecl :: Global
140144 -> Method Solved
141145 -> Decl
142146requestDecl n p api url fs m =
143− googleRequestDecl n (tycon n) rs alt p api url fs m
147+ googleRequestDecl n (tycon n) rs alt p api url fs m pat prec
144148 where
145149 rs = InsType noLoc (TyApp (TyCon "Rs") (tycon n)) $
146150 maybe unit_tycon (tycon . ref) (_mResponse m)
@@ -148,6 +152,11 @@ requestDecl n p api url fs m =
148152 alt = var . name . Text.unpack . alternate <$>
149153 (Map.lookup "alt" (_mParameters m) >>= view iDefault)
150154
155+ pat | _mSupportsMediaDownload m = PInfixApp (pvar "go") (UnQual (sym ":<|>")) PWildCard
156+ | otherwise = pvar "go"
157+
158+ prec = PRec (UnQual (dname n)) [PFieldWildcard]
159+
151160googleRequestDecl :: Global
152161 -> Type
153162 -> InstDecl
@@ -157,8 +166,10 @@ googleRequestDecl :: Global
157166 -> Name
158167 -> [Local]
159168 -> Method Solved
169+ -> Pat
170+ -> Pat
160171 -> Decl
161−googleRequestDecl g n assoc alt p api url fields m =
172+googleRequestDecl g n assoc alt p api url fields m pat prec =
162173 InstDecl noLoc Nothing [] [] (unqual "GoogleRequest") [n]
163174 [ assoc
164175 , request
@@ -181,18 +192,20 @@ googleRequestDecl g n assoc alt p api url fields m =
181192 , var "u"
182193 ]
183194 ]
184− where
185− pat | _mSupportsMediaDownload m = PInfixApp (pvar "go") (UnQual (sym ":<|>")) PWildCard
186− | otherwise = pvar "go"
187195
188196 rhs = UnGuardedRhs . appFun (var "go") $ map go fs'
189197 ++ maybeToList (app (var "Just") <$> alt)
190198 ++ maybeToList (go <$> rq)
199+ ++ maybeToList (go <$> pay)
191200 where
192− go l | Just p <- Map.lookup l ps
193− , _pLocation p == Query
194− , parameter p || defaulted p = app (var "Just") (v l)
195− | otherwise = v l
201+ go l = case Map.lookup l ps of
202+ Just p | _pLocation p == Query
203+ , p ^. iRepeated -> infixApp (v l) "^." (var "_Default")
204+
205+ Just p | _pLocation p == Query
206+ , parameter p || defaulted p -> app (var "Just") (v l)
207+
208+ _ -> v l
196209
197210 ps = _mParameters m
198211 v = var . fname p
@@ -200,13 +213,15 @@ googleRequestDecl g n assoc alt p api url fields m =
200213 (fs', rq) | Just _ <- _mRequest m = (delete "payload" fs, Just "payload")
201214 | otherwise = (fs, Nothing)
202215
216+ pay | _mSupportsMediaUpload m = Just "media"
217+ | otherwise = Nothing
218+
203219 fs = delete "alt"
204220 . orderParams id (Map.keys (_mParameters m))
205221 . nub
206222 $ map fst (rights (extractPath (_mPath m))) ++ _mParameterOrder m
207223
208224 pats = [pvar "r", pvar "u", prec]
209− prec = PRec (UnQual (dname g)) [PFieldWildcard]
210225
211226authDecl :: Global -> Prefix -> [Local] -> Decl
212227authDecl g p fs = InstDecl noLoc Nothing [] [] (unqual "GoogleAuth") [tycon g]
@@ -374,8 +389,8 @@ def s
374389terminalType :: TType -> Type
375390terminalType = internalType . go
376391 where
377− go (TMaybe x) = x
378− go (TList x) = x
392+ go (TMaybe x) = go x
393+ go (TList x) = go x
379394 go x = x
380395
381396externalType :: TType -> Type