Skip to content

Instantly share code, notes, and snippets.

Infinigraph, and beyond!

Sean Grove sgrove

Infinigraph, and beyond!
View GitHub Profile

Reading the (already impressive) compiled output in in the tutorial by Michele Riva on Calling ReasonML from TypeScript, I thought the output could be made nearly identical (bar comments and some weird nest paren wrapping) to what an experienced dev might write by hand

If we:

  1. have Flat-variants-(and polymorphic-variants)-as-strings (see
  2. Omit String(x) when x is already a string (already merged): rescript-lang/rescript-compiler#4293
  3. Propogate the variable names from destructuring a tuple to the output (see
  4. Don't do nested parens inside of {j|$x foo $y bar $z baz|j} output

Then the output (minus the /* tuple */ comments) would be exactly what you'd write by hand!

type editor;
module Editor: {
let make:
~width: string=?,
~height: string=?,
~value: string=?,
~defaultValue: string=?,
View gist:6ebea98f998c6a25fa9fd476244d7c49

Keybase proof

I hereby claim:

  • I am sgrove on github.
  • I am sgrove ( on keybase.
  • I have a public key whose fingerprint is 35A0 F67E AD5E 19C0 75B2 7F72 C0B8 0362 7E5F CE94

To claim this, I am signing this object:

sgrove / Example_queries.graphql
Created Jul 16, 2018
Example Descuri (URLHound?) Queries
View Example_queries.graphql
descuri(url: "") {
twitter {
youTube {
other {
sgrove / google_maps.gql
Created Jul 14, 2018
Google Maps (Reverse+) Geolocation and Elevation API
View google_maps.gql
google(auths: { googleMapsKey: "..." }) {
maps {
intersection: geolocation(address: "Eddy & Franklin St, San Francisco, CA") {
point: reverseGeolocation(
point: { lat: 37.7478646802915, lng: -122.4578673697085 }
) {
sgrove / onegraph.gql
Last active Jul 12, 2018
Example multi-service query with OneGraph and GraphQL
View onegraph.gql
## Retrieve a YouTube video by its id
youTubeVideo(id: "YX40hbAHx3s") {
snippet {
# Pull out the title
# Jump to the channel the video was uploaded to
uploadChannel {
snippet {
# Get the title of the channel
View twitter_example_timeline.json
"created_at": "Thu Apr 06 15:28:43 +0000 2017",
"id": 850007368138018817,
"id_str": "850007368138018817",
"text": "RT @TwitterDev: 1/ Today we’re sharing our vision for the future of the Twitter API platform!n",
"truncated": false,
"entities": {
"hashtags": [],
"symbols": [],
sgrove /
Last active Feb 11, 2019
Bad interaction between Async wrapper around ocurl and httpaf
[@@ocaml.doc " Async support for Curl, see "]
module M = Curl.Multi
type interrupt = unit Async.Ivar.t
type multi =
mt: ;
all_events: (Unix.file_descr, interrupt list) Hashtbl.t ;
wakeners: (Curl.t, Curl.curlCode Async.Ivar.t) Hashtbl.t }
sgrove / curl->clj.clj
Last active Aug 18, 2021
Convert Chrome's `copy-as-curl` to clj-http calls
View curl->clj.clj
(defn curl->clj*
"Given a (single) curl string from Chrome's copy-as-curl, convert it either
into a clj-http call, a task-based http entry, or a shortened
task-based entry"
(curl->clj* curl-str {}))
([curl-str conv-opts]
(let [clean-opts (:clean conv-opts)
merge-opts (:merge conv-opts)
headers (->