▲ JavaScript, Types and Sets - Part II at gcanti.github.io▼5 up and 0 down, posted by eskimoblood 3681 days ago 1 comment
gcanti 3678 days ago. link 1 point ▲ ▼Hello, this is a divulgative article, but I think that type combinators can be very useful also in practice: I'm thinking of using them as a JavaScript internal DSL to describe, with a compact notation, the structure of a JSON. Say you have this JSON (excerpt from the GitHub JSON API `https://api.github.com/repos/facebook/react`): { "login": "facebook", "id": 69631, "avatar_url": "https://avatars.githubusercontent.com/u/69631?v=2", "gravatar_id": "", "url": "https://api.github.com/users/facebook", "html_url": "https://github.com/facebook", "followers_url": "https://api.github.com/users/facebook/followers", "following_url": "https://api.github.com/users/facebook/following{/other_user}", "gists_url": "https://api.github.com/users/facebook/gists{/gist_id}", "starred_url": "https://api.github.com/users/facebook/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/facebook/subscriptions", "organizations_url": "https://api.github.com/users/facebook/orgs", "repos_url": "https://api.github.com/users/facebook/repos", "events_url": "https://api.github.com/users/facebook/events{/privacy}", "received_events_url": "https://api.github.com/users/facebook/received_events", "type": "Organization", "site_admin": false } You can describe succinctly the structure of the API payload with a struct combinator var Payload = struct({ avatar_url: Str events_url: Str followers_url: Str following_url: Str gists_url: Str gravatar_id: Str html_url: Str id: Num login: Str organizations_url: Str received_events_url: Str repos_url: Str site_admin: Bool starred_url: Str subscriptions_url: Str type: Str url: Str }); Now this is a simple example (no nested structures) but when the payload is more complex, the notation become even more useful