It's more that only really strongly disagreed with that point. Frankly, there are some cons with using Ocaml. In practice, I think the library support for ocaml isn't completely there given the small community.
I don't the author really gave Ocaml a chance. He argues that every language needs to have interfaces. I agree somewhat with that statement, but I think the truer statement is to say that every language needs to have some way of defining composition at a structural level.
An interface allows you to pass different "structures" to the same function so long as they adhere to the same spec. In Ocaml this is accomplished through modules, functors, and module signatures. Ocaml's module signature can play the same exact role as interfaces in Haskell, Rust or F#.
The module system is arguably more expressive than what can be accomplished to interfaces. To give an example, Ocaml suffers from the same problem as rust does with having two standard implementations of a async runtime. Just like rusts: tokio and async-std, ocaml has Lwt, Async, (and newly added to the mix Eio).
Whereas in rust most libraries just implement one of these systems, and you'll have to use compiler directives to support both. Ocaml's module system means that you can describe the async runtime as a signature and make your entire library generic to the async runtime it runs on top of. Most of the well-used libraries do this, and so you don't have to worry too much about which runtime you decide to use.
Clearly, a language that can do that must have in some place a system that can replace interfaces.
Just paste the job post and your resume or LinkedIn, and get a tailored cover letter in minutes. Excited to hear your feedback and suggestions to improve it—try it out and land your dream job!
Yeah I noticed I wasn't the only one with this idea either :)
It's using text-davinci-3 mostly because I was too lazy to move to gpt-3.5-turbo since that required moving to the chat api. I'll probably make the move if people use this tool enough that I'm worried about the bill from openai.
- It being impressively fast comes from me using the streaming API. That's actually where I spent most of my effort making work. OpenAI sends their messages via SSE to my server which then instantly streams that also by SSE to the browser client. It turns out this is hard to make work because most reverse proxies want to buffer responses so you have to figure out the configuration to make sure your responses aren't buffered.
- The candidate name link problem comes from the fact that I translate GPT3's output as markdown so [Candidate Name] turns into a link to nothing (I'm gonna go and change that soon I swear).
What I've noticed is that it's optional for most places I applied to. There was this time where I applied to a startup and added a cover letter. The interviewer remembered of me as "the guy who wrote a cover letter".
That made me realize that since most people aren't doing it, a cover letter would help me standout. Seeing a cover letter is rare enough that people value it more. Nowadays, I make one for any role I'm very excited about.
I think saying that Option types are different from nullable types is not true. They differ at the semantic level, around how you can interact with them (one requires you to case on whether or not the value is there, the other requires you to do that with an if statement), but at the type level the describe the same construct.
I think saying something is not the same as something else, when evidently the difference can to reduced down to syntactic sugar is a bad way categorizing and differentiating types.
I made a chrome extension called Capsule that works perfectly for this use case. With just a click, you can create a publically shareable link that preserves the webpage exactly as you see it in your browser.
definitely on your side. If I recall correctly, they posted flyers around Palo Alto, and that's how they get their first users to show up on their site.
Taking a step back, if you want to see this become more widely useable I'd suggest finding ways to integrate to existing workflows.