Skip to content

Instantly share code, notes, and snippets.

View sgrove's full-sized avatar
💭
Infinigraph, and beyond!

Sean Grove sgrove

💭
Infinigraph, and beyond!
View GitHub Profile
I would like you to translate TypeScript react components to Rescript react components, using some examples I will provide as a guide. Any time you are unsure as to the equivalency between a TypeScript construct and its Rescript counterpart, add it to a "Future examples to provide" list you output at the end after the code.
Let's begin!
Heres PromptEditor.tsx:
```
import React, { useState } from "react";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
@sgrove
sgrove / curl->clj.clj
Last active August 18, 2021 14:27
Convert Chrome's `copy-as-curl` to clj-http calls
(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-str]
(curl->clj* curl-str {}))
([curl-str conv-opts]
(let [clean-opts (:clean conv-opts)
merge-opts (:merge conv-opts)
headers (->

Reading the (already impressive) compiled output in helper.bs.js 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 ideal_output_2.bs.js)
  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: {
[@react.component]
let make:
(
~width: string=?,
~height: string=?,
~value: string=?,
~defaultValue: string=?,
https://gist.github.com/sgrove/7c2da3ee8e4894017af98c80b6b5fbb6
@sgrove
sgrove / curl_async.ml
Last active February 11, 2019 12:24
Bad interaction between Async wrapper around ocurl and httpaf
[@@ocaml.doc " Async support for Curl, see https://github.com/ygrek/ocurl/blob/master/curl_lwt.ml "]
module M = Curl.Multi
type interrupt = unit Async.Ivar.t
type multi =
{
mt: Curl.Multi.mt ;
all_events: (Unix.file_descr, interrupt list) Hashtbl.t ;
wakeners: (Curl.t, Curl.curlCode Async.Ivar.t) Hashtbl.t }

Keybase proof

I hereby claim:

  • I am sgrove on github.
  • I am sgrove (https://keybase.io/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
sgrove / google_maps.gql
Created July 14, 2018 01:29
Google Maps (Reverse+) Geolocation and Elevation API
{
google(auths: { googleMapsKey: "..." }) {
maps {
intersection: geolocation(address: "Eddy & Franklin St, San Francisco, CA") {
...fullMap
}
point: reverseGeolocation(
point: { lat: 37.7478646802915, lng: -122.4578673697085 }
) {
...fullMap
@sgrove
sgrove / Example_queries.graphql
Created July 16, 2018 10:47
Example Descuri (URLHound?) Queries
{
descuri(url: "https://news.ycombinator.com/user?id=tlrobinson") {
twitter {
links
}
youTube {
uri
}
other {
uri
@sgrove
sgrove / onegraph.gql
Last active July 12, 2018 21:14
Example multi-service query with OneGraph and GraphQL
{
## Retrieve a YouTube video by its id
youTubeVideo(id: "YX40hbAHx3s") {
snippet {
# Pull out the title
title
# Jump to the channel the video was uploaded to
uploadChannel {
snippet {
# Get the title of the channel