Learning Functional Programming in Go
上QQ阅读APP看书,第一时间看更新

A coding example of functions that modify functions

The following is a snippet of the code we might write to build a section of a page with two drop down lists, one for makes and the other for models of cars:

// http.Get :: String -> JSON
var renderPage = curry(func(makes, models) { /* render page */ })
// return two ps: one with makes and the other with models HTML/ULs
Task.Of(renderPage).Ap(http.Get("/makes")).Ap(http.Get("/models"))

Notice that each http.Get is a separate API call. Each API call is a partial application. In order for renderPage to wait for each call to complete we must curry our API calls.

Here's what the resulting HTML might look like: