frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

I Hate Acrobat

https://www.vincentuden.xyz/blog/pdf-reader
72•vincent-uden•1h ago•49 comments

Apple M5 chip

https://www.apple.com/newsroom/2025/10/apple-unleashes-m5-the-next-big-leap-in-ai-performance-for...
885•mihau•10h ago•985 comments

Claude Haiku 4.5

https://www.anthropic.com/news/claude-haiku-4-5
379•adocomplete•6h ago•161 comments

How First Wap Tracks Phones Around the World

https://www.lighthousereports.com/methodology/surveillance-secrets-explainer/
14•mattboulos•50m ago•0 comments

Next Steps for the Caddy Project Maintainership

https://caddy.community/t/next-steps-for-the-caddy-project-maintainership/33076
44•francislavoie•1h ago•6 comments

I almost got hacked by a 'job interview'

https://blog.daviddodda.com/how-i-almost-got-hacked-by-a-job-interview
658•DavidDodda•10h ago•350 comments

Bringing NumPy's type-completeness score to nearly 90% – Pyrefly

https://pyrefly.org/blog/numpy-type-completeness/
21•todsacerdoti•1w ago•5 comments

Are hard drives getting better?

https://www.backblaze.com/blog/are-hard-drives-getting-better-lets-revisit-the-bathtub-curve/
86•HieronymusBosch•6h ago•40 comments

Pwning the Nix ecosystem

https://ptrpa.ws/nixpkgs-actions-abuse
223•SuperShibe•9h ago•39 comments

Show HN: Halloy – Modern IRC client

https://github.com/squidowl/halloy
262•culinary-robot•11h ago•73 comments

Monads are too powerful: The expressiveness spectrum

https://chrispenner.ca/posts/expressiveness-spectrum
41•hackandthink•3d ago•36 comments

Recursive Language Models (RLMs)

https://alexzhang13.github.io/blog/2025/rlm/
51•talhof8•5h ago•13 comments

Zed is now available on Windows

https://zed.dev/blog/zed-for-windows-is-here
104•meetpateltech•6h ago•29 comments

F5 says hackers stole undisclosed BIG-IP flaws, source code

https://www.bleepingcomputer.com/news/security/f5-says-hackers-stole-undisclosed-big-ip-flaws-sou...
115•WalterSobchak•9h ago•57 comments

Leaving serverless led to performance improvement and a simplified architecture

https://www.unkey.com/blog/serverless-exit
272•vednig•11h ago•173 comments

A kernel stack use-after-free: Exploiting Nvidia's GPU Linux drivers

https://blog.quarkslab.com/./nvidia_gpu_kernel_vmalloc_exploit.html
118•mustache_kimono•9h ago•10 comments

ImapGoose

https://whynothugo.nl/journal/2025/10/15/introducing-imapgoose/
4•xarvatium•49m ago•0 comments

Recreating the Canon Cat document interface

https://lab.alexanderobenauer.com/updates/the-jasper-report
78•tonyg•8h ago•6 comments

Princeton Engineering Anomalies Research

https://pearlab.icrl.org/
21•walterbell•1w ago•4 comments

Garbage collection for Rust: The finalizer frontier

https://soft-dev.org/pubs/html/hughes_tratt__garbage_collection_for_rust_the_finalizer_frontier/
102•ltratt•11h ago•105 comments

Reverse engineering a 27MHz RC toy communication using RTL SDR

https://nitrojacob.wordpress.com/2025/09/03/reverse-engineering-a-27mhz-rc-toy-communication-usin...
72•austinallegro•8h ago•17 comments

C++26: range support for std:optional

https://www.sandordargo.com/blog/2025/10/08/cpp26-range-support-for-std-optional
68•birdculture•5d ago•55 comments

Gerald Sussman - An Electrical Engineering View of a Mechanical Watch (2003)

https://techtv.mit.edu/videos/15895-an-electrical-engineering-view-of-a-mechanical-watch
8•o4c•1w ago•0 comments

Ask HN: Can't get hired – what's next?

12•silvercymbals•25m ago•7 comments

Things I've learned in my 7 years implementing AI

https://www.jampa.dev/p/llms-and-the-lessons-we-still-havent
115•jampa•4h ago•41 comments

Americans' love of billiards paved the way for synthetic plastics

https://invention.si.edu/invention-stories/imitation-ivory-and-power-play
52•geox•6d ago•27 comments

M5 MacBook Pro

https://www.apple.com/macbook-pro/
291•tambourine_man•10h ago•399 comments

Pixnapping Attack

https://www.pixnapping.com/
285•kevcampb•17h ago•67 comments

Helpcare AI (YC F24) Is Hiring

1•hsial•11h ago

The brain navigates new spaces by 'darting' between reality and mental maps

https://medicine.yale.edu/news-article/brain-navigates-new-spaces-by-flickering-between-reality-a...
123•XzetaU8•1w ago•44 comments
Open in hackernews

Monads are too powerful: The expressiveness spectrum

https://chrispenner.ca/posts/expressiveness-spectrum
41•hackandthink•3d ago

Comments

PaulHoule•2h ago
I'd argue the exact opposite. Compared to what you can do if you can write compilers anything that involves composing functions is weak beer and most monad examples cover computational pipelines as opposed to computational graphs. It's like that Graham book On Lisp, it's a really fun book but then you realize that screwing around with functions and macros doesn't hold a candle to what you learn from the Dragon Book.
taeric•2h ago
I maintain that the big advantage of the On Lisp approach is that all of that is available without having to write a new compiler.

Granted, I also don't have as heavy an attachment to pure functional as most people seem to build. Don't get me wrong, wanton nonsense is nonsensical. But that is just as true in immutable contexts.

PaulHoule•2h ago
What I found remarkable about that book is that 80% of what is in it can be done with functions and no macros, mostly you can rewrite the examples in Python except for the coroutines but Python already has coroutines. It also irks me that the I don’t think the explanation of coroutines in Scheme is very clear but it’s become the dominant one you find in the net and I can’t find a better one.

As for ‘compiler’ you also don’t need to go all the way to bare metal, some runtime like WASM or the JVM which is more civilized is a good target these days.

taeric•2h ago
Totally fair. I think a lot of the things we used to do in the name of efficiency has been completely lost in the progress of time. Largely from the emergence and refinement of JIT compilers, I think?

That is, a lot of why you would go with macros in the past was to avoid the expense of function calls. Right? We have so far left the world of caring about function call overhead for most projects, that it is hard to really comprehend.

Coroutines still strike me as a hard one to really grok. I remember reading them in Knuth's work and originally thinking it was a fancy way of saying what we came to call functions and methods. I think without defining threads first, defining a coroutine is really hard to nail down. And too many of us take understanding of threads as a given. Despite many of us (myself not immune) having a bad understanding of threads.

bvrmn•56m ago
Coroutines as a technique to implement state machines is the first things which comes to my mind. It's a more abstract and requires a way less fundamentals to know comparing to concurrency.
taeric•50m ago
But coroutines really only work any better than "objects" if you understand the implication to the stack pointer? Which requires understanding exactly what a thread is. Right?

That is, a basic class that has defined state and methods to modify the state is already enough to explain a state machine. What makes coroutines better for it?

andersmurphy•1h ago
Yeah, I've had fun using macros to create optimised functions at runtime (inline caching effectively) and/or generate code that is more friendly to the JVM JIT.

Also, there's always plenty of use for doing work at compile time.

In some sense they can also be seen as a better code generation.

instig007•2h ago
> if you can write compilers anything that involves composing functions is weak beer

> screwing around with functions and macros doesn't hold a candle to what you learn from the Dragon Book.

---

So, what is it that you learn from that book that's a revelation for you compared to the weak beer of composable effect systems?

fn-mote•1h ago
> screwing around with functions and macros doesn't hold a candle to what you learn from the Dragon Book

This depends a lot on what you mean. My first take is that the more you know about macros the more you realize what they can do.

I don’t know what your takeaway from the Dragon Book was, but writing DSLs using macros feels very usefully powerful to me.

I think you are undervaluing modern macros.

veqq•1h ago
But lisp programs are compilers. That's the whole point of lisp and macros. Your functions can happily emit assembly direction.
whycombinetor•2h ago
Yes. For the same reason that the Yoneda lemma and the Cayley theorem are almost meaningless tautologies once you fully understand what they're saying. "Every small thing (of a certain type) is able to be expressed as a subcase of a bigger thing that contains every single possible subcase in existence." Well no shit.
IshKebab•2h ago
Interesting, but it seems like he kind of proved himself wrong? Monads are the only option he presented that are sufficiently powerful for normal programs.
bokumo•59m ago
I don't think you're being fair to Chris Penner. He ends his blog post with: "It may take me another 5 years to finally finish it, but at some point we'll continue this journey and explore how we can sequence effects using the hierarchy of Category classes instead." Emphasis by me.

So while it is true, that what he has described so far is not sufficiently powerful for normal programs, he has clearly stated that there are more abstractions between Applicative and Monad to explore than what he has presented so far.

bionhoward•1h ago
And here I thought it was a pedantic word for “data box”
jcmontx•1h ago
Haskell looks a heck lot like F#, even more than Ocaml if you ask me
gowld•34m ago
Paging John Harrop...

https://news.ycombinator.com/item?id=1396763

SchemaLoad•1h ago
I tried learning Haskell for a decent chunk of time and could make some stuff, but despite trying to learn, I still could not tell you what a monad actually is. All the explanations for it seemed to make no sense.
gowld•51m ago
The important thing to know first is that a monad is not a single thing like "Optional". "monad" is a pattern or "interface" (called a "typeclass" in Haskell), that has many implementations, (Optional, Either, List, State Transormer, IO (Input/Output), Logger, Continuation, etc). Sort of how "Visitor" pattern in C++/Java is not a single thing.

https://hackage.haskell.org/package/base-4.21.0.0/docs/Contr...

https://book.realworldhaskell.org/read/monads.html

A common metaphor for monad is "executable semicolons". They are effectively a way to add (structured) hook computations (that always returns a specific type of value) to run every time a "main" computation (akin to a "statement" in other languages) occurs "in" the monad.

It's sort of like a decorator in Python, but more structured. It lets you write a series of simple computational steps (transforming values), and then "dress them up" / "clean them up" by adding a specific computation to run after each step.

Ryder123•46m ago
This makes SchemaLoad's comment perfectly clear.

(but do I appreciate the effort you put into your reply - reading that monad's are more like interfaces is new information to me, and might help down the road)

hinkley•50m ago
Unfortunately no one can tell you what a monad is. You have to experience it for yourself. - Haskell Morpheus
bananaflag•46m ago
You should first understand what a typeclass and a Functor is.
b0sk•42m ago
This is great imo -- https://www.adit.io/posts/2013-04-17-functors,_applicatives,...
oncallthrow•41m ago
A monad is just a monoid in the category of endofunctors
kmstout•8m ago
It's like an enchilada, right?
valiant55•39m ago
Forget all the academic definitions, at it's core a monad is a container or wrapper that adds additional functionality to a type.
1718627440•47s ago
Yes, this is the only definition I get, but the I don't get all the rage about monads, because containers and standardized interfaces are nothing new, so surely that definition must be wrong?
bitwize•35m ago
Just think of it as a design pattern, but a bit more strict than the Gang of Four patterns. Fundamentally it's a relationship between types and other types such that certain operations make sense and follow well-understood rules (the monadic laws). Study the monadic laws, and try playing with the State, IO, and List monads to get a better sense of what those operations are and why they're useful for sequencing in a pure-functional context.
munk-a•31m ago
Someone may correct me but - in three levels of conciseness...

A monad is a function that can be combined with other functions.

It's a closure (or functor to the cool kids) that can be bound and arranged into a more complex composite closure without a specification of any actual value to operate on.

It's a lazy operation declaration that can operate over a class of types rather than a specific type (though a type is a class of types with just a single type so this is more a note on potential rather than necessary utility) that can be composed and manipulated in languages like Haskell to easily create large declarative blocks of code that are very easy to understand and lend themselves easily to abstract proofs about execution.

You've probably used them or a pattern like them in your code without realizing it.

1718627440•2m ago
So it's a function pointer, right? /s
ilikebits•30m ago
Monads are a generalization of Promises. Each type in Monad defines their own `.then` in a different way. For promises, `.then` is defined as "run this function once you have this deferred value from the last promise". For optionals (`Maybe`), `.then` is defined as "run this function if the last optional had an actual value". For Either, `.then` is defined as "run this function if the last Either returned Right, otherwise early-return with the value from Left" (this is functional early-return, basically).
astrange•26m ago
It's an implementation of the typeclass Monad, which happens to come with a special "do" keyword.
the__alchemist•22m ago
Nan-in received a university professor who came to inquire about Monads

Nan-in served tea. He poured his visitor’s cup full, and then kept on pouring.

The professor watched the overflow until he no longer could restrain himself. “It is overfull. No more will go in!”

“Like this cup,” Nan-in said, “you are full of your own opinions and speculations. How can I show you a Monad unless you first empty your cup?”

tasuki•3m ago
This is as good an explanation of monads as any. Which is to say, bad.
jancsika•36m ago
It'd be nice to have a process like the following:

1. I free solo a bunch of junk in vanilla javascript with state flowing hither and thither until I'm out of coffee

2. I test the exact behaviors(s) I wanted to make possible in the GUI I just wrote.

3. The framework whitelists only the event chains from my test.

4. For any blacklisted event chains, the user gets a Youtube video screencast of the whitelisted test so they can learn the correct usage of my GUI.

spewffs•26m ago
Yes monads in general are too expressive but the answer isn't to limit the typeclass to something between applicative and monad but rather to limit what monads are allowed. The problem is that there should only be one monad: an effect monad loaded with various effects depending on the side effect needed. Instead of defining this or that monad, there should only be the capability to define the effect you need.

In that case, everything runs within the effect monad and then no one would ever really need to learn what a monad is, just that some calls are effectful (like reading a file or throwing an exception).