HNHacker News
TopNewBestAskShowJobs

travv0

125 karma · joined September 17, 2014

submissionscomments
travv0··on Forgit: A utility tool powered by fzf for using Git interactively
See https://news.ycombinator.com/item?id=31416448
travv0··on Forgit: A utility tool powered by fzf for using Git interactively
I assumed those were aliases for `git a` and `git cp` which are in the config file.
travv0··on Forgit: A utility tool powered by fzf for using Git interactively
What tools? That's a git config file.
travv0··on Minnesota Wants to Ban Under-18s from User-Generated Content Services
> The fact most kids dont have a relationship with their parents or guardians where they can talk to them about anything is highlighted with metadata like you have highlighted.

You have a source for that? The statistics you're referring certainly don't say anything at all to back your claim.

travv0··on Dark pattern: how YouTube makes sure you don’t always “skip ad”
I also haven't seen an ad on the Gmail web client in years. Maybe because I pay for extra storage through Google One?

Edit: It looks like it doesn't happen in the primary tab and I have all the other tabs disabled which would explain it.

travv0··on Nim Version 1.6.6 Released
Reading through the GitHub issue, it seems like the one place it makes sense in my eyes is that you can refer to stuff in external libraries with your convention even if the library uses a different one. I'm not sure if there's something I'm not thinking of, but to me it'd make sense if the library boundary was the only place it let you do it.
travv0··on How side effects work in FP
Thanks, but an answer from someone that knows the language that they're talking about would be much more productive.
travv0··on Google claims it reduced irrelevant search results by over 50% in seven years
> Lately when I search for something like "recipe for borgelnuski" I get a page of links to sites with names like "Molly and Audrey" that first tell you a long story about their grandmothers pet kangaroo, then go through a very long a tedious explanations about ingredients, then vaguely go through the recipe step by step with a lot of pictures, but if you don't mind scrolling for 20 or 30 minutes, you get a very good recipe for borgelnuski.

So what you're saying is Google took you to a page that had a very good version of the thing you were searching for?

travv0··on How side effects work in FP
> FP is terrible at logging

Um, what? You can't just drop this without elaborating. I've never seen anybody have problems logging in a functional language.

travv0··on High-order Virtual Machine (HVM): Massively parallel, optimal functional runtime
You still haven't shown me any data to back up your assertion, but you're welcome I guess.
travv0··on High-order Virtual Machine (HVM): Massively parallel, optimal functional runtime
Here's one more file than you listed without BangPatterns enabled:

https://github.com/rainbyte/frag/blob/master/src/BitSet.hs

https://github.com/rainbyte/frag/blob/master/src/Command.hs

https://github.com/rainbyte/frag/blob/master/src/Curves.hs

BangPatterns is a normal language extension to have enabled, was this used heavily? (hint: it's not enabled on "every source file.") You listed two of 28 files there, I'm assuming to try to show that the vast majority of the code in that repository is in the IO monad? You went from "vast majority" from one file to now two files. I'm looking for objectivity here, as you seem to be into. Let's see some numbers. I think anyone that glances at that repo would need some convincing of your claims.

Render.hs is 211 of 5580 lines of Haskell in the repository, by the way.

travv0··on High-order Virtual Machine (HVM): Massively parallel, optimal functional runtime
> The vast majority of the code in that repository is in the IO monad and uses carefully placed “!” eager evaluation annotations.

This is the claim we're talking about. Since you're into facts, not subjective opinions, show some evidence that the vast majority of the code in the repository is in the IO monad and uses carefully placed "!" eager evaluation annotations. Just to be clear, you haven't done that yet. That's a fact, not a subjective opinion.

travv0··on High-order Virtual Machine (HVM): Massively parallel, optimal functional runtime
Yes, rendering is by definition I/O. That's also one file. You stated:

> The vast majority of the code in that repository is in the IO monad and uses carefully placed “!” eager evaluation annotations.

Do you have anything to back that up?

travv0··on High-order Virtual Machine (HVM): Massively parallel, optimal functional runtime
> The vast majority of the code in that repository is in the IO monad and uses carefully placed “!” eager evaluation annotations.

Looking through that repository, I believe we have extremely different definitions of "vast majority."

travv0··on Software Development Languages: Haskell
I find VS Code with the Haskell extension to be very good for displaying type signatures, code completion and navigation, etc. Holes (which are covered by the article) are the go-to way to see what's possible at the current location. You type an underscore in your code and the compiler tells you a bunch of information about what goes there including things you could put there that would typecheck.
travv0··on On being a PhD student of Robert Harper
It's absolutely not peculiar to Python, it's something that every single language implementation has to make a decision on one way or the other.

Here's an SO answer from 2008 about how to enable TCO in various C and C++ compilers: https://stackoverflow.com/questions/34125/which-if-any-c-com...

There are many things both you and I have never heard of before. That's normal.

travv0··on On being a PhD student of Robert Harper
I'm not sure, so here are a couple examples.

    def f() =
       g()
In a language implementation that doesn't optimize tail calls, the stack would look like the following after the call to g:

    g
    f
    main
In a language implementation that does optimize tail calls, the stack would look like this, because the result of f is whatever the result of g is so f is no longer needed:

    g
    main
If a language implementation doesn't optimize recursive tail calls, the following code will quickly overflow the stack and the program will crash:

    def loop() =
        do something...
        loop()
In a language implementation that does optimize recursive tail calls, this code can run forever because loop's stack frame gets replaced with the stack frame of the new call to loop.

The reason people want recursive tail calls optimized out is at a much higher level than anything to do with the actual CPU instructions being used, they just want to have a way to write recursive functions without worrying about the stack overflowing.

What's my age group, by the way?

travv0··on On being a PhD student of Robert Harper
Tail call optimization has nothing to do with optimizing for different CPUs, it's about dropping a function's stack frame when it's evaluating its return expression and its stack frame isn't needed anymore.
travv0··on In defense of complicated programming languages
What problem? I'm looking for an example of where poor scalability has been a problem in a Haskell codebase.
travv0··on In defense of complicated programming languages
I'd also be interested in a Haskell example.
travv0··on Why I Like D
You almost never use List<T>? Dictionary<TKey, TValue>? IEnumerable<T>?
travv0··on From TypeScript to ReScript
> - oh, it's not "just a bind operator"

It is though, it's a function/operator that is defined in userland.

> - oh, you need special syntax

> - oh, you need a third party library that may or may not have support for that special syntax

No, you don't need either of these things. These just add a convenient syntax that desugars to the aforementioned bind function. These PPXs aren't special keywords specifically for async/await that had to be added into the language's syntax itself. Note that I know nothing about ReScript and this reply is not about ReScript, as that's not what this comment chain is about.

travv0··on An Ode to Ruby
> Even Haskell has dot notation to chain functions since it's just so much easier to read and write...

Are you referring to function composition?

travv0··on IHP v0.17.0 has been released
The people that would want to know about a new version of some software are surely already familiar with that software, no?
travv0··on Some thoughts about raising the profile of Lisp
> Everyone who could possibly care about Lisp already knows everything they care to know about it.

I think you're in a bit of an HN bubble if you honestly believe this to be true.

travv0··on Six Years of Professional Clojure
> But what is purpose of `Maybe`?

In this case, it's to provide a better error message in case there's an empty list than `fromList` would provide.

> You never have to worry about that value in this case because... well... that's the benefit of using `Maybe`.

But you do, your entire program doesn't live in `Maybe` so at some point you have to check whether it's `Just a` or `Nothing`. Once again, the whole point of the post is to argue that getting out of the `Maybe` as close to parsing time as possible is preferable so you have a more specific type to work with after that. You also see right away what didn't parse instead of just knowing that something didn't parse, which is what would happen if you stayed in the `Maybe` monad for all your parsing.

travv0··on Six Years of Professional Clojure
The very first property testing library was written in Haskell, as far as I know.
travv0··on Six Years of Professional Clojure
Lexi absolutely understands how to properly use the Maybe monad. What you're saying to do here is the exact opposite of what this post is advocating for. You're talking about pushing the handling of the Maybe till later and the post is all about the advantages of handling it upfront and not having to worry about it anymore. You might want to read it one more time.
travv0··on Beads: Computer language and toolchain
Just to elaborate a bit, in CL, numbers are FIXNUMs by default but are promoted to BIGNUMs if needed. CL also has rational and complex numbers, which it probably got from Scheme but I'm not familiar with that history.
travv0··on uLisp
The "Embeddable" in Embeddable Common Lisp means that you can embed your CL code in C programs, not that it's for embedded programming. Probably a poor naming choice because a lot of people have this perception about it.
Page 1 of 4Next →