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 July 16, 2018 10:47
Example Descuri (URLHound?) Queries
View Example_queries.graphql
descuri(url: "") {
twitter {
youTube {
other {
sgrove / google_maps.gql
Created July 14, 2018 01:29
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 July 12, 2018 21:14
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 February 11, 2019 12:24
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 August 18, 2021 14:27
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 (->