frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

pi-nes

https://twitter.com/thomasmustier/status/2018362041506132205
1•tosh•2m ago•0 comments

Show HN: Crew – Multi-agent orchestration tool for AI-assisted development

https://github.com/garnetliu/crew
1•gl2334•2m ago•0 comments

New hire fixed a problem so fast, their boss left to become a yoga instructor

https://www.theregister.com/2026/02/06/on_call/
1•Brajeshwar•3m ago•0 comments

Four horsemen of the AI-pocalypse line up capex bigger than Israel's GDP

https://www.theregister.com/2026/02/06/ai_capex_plans/
1•Brajeshwar•4m ago•0 comments

OpenClaw v2026.2.6

https://github.com/openclaw/openclaw/releases/tag/v2026.2.6
1•salkahfi•4m ago•0 comments

A free Dynamic QR Code generator (no expiring links)

https://free-dynamic-qr-generator.com/
1•nookeshkarri7•5m ago•1 comments

nextTick but for React.js

https://suhaotian.github.io/use-next-tick/
1•jeremy_su•6m ago•0 comments

Show HN: I Built an AI-Powered Pull Request Review Tool

https://github.com/HighGarden-Studio/HighReview
1•highgarden•6m ago•0 comments

Git-am applies commit message diffs

https://lore.kernel.org/git/bcqvh7ahjjgzpgxwnr4kh3hfkksfruf54refyry3ha7qk7dldf@fij5calmscvm/
1•rkta•9m ago•0 comments

ClawEmail: 1min setup for OpenClaw agents with Gmail, Docs

https://clawemail.com
1•aleks5678•16m ago•1 comments

UnAutomating the Economy: More Labor but at What Cost?

https://www.greshm.org/blog/unautomating-the-economy/
1•Suncho•23m ago•1 comments

Show HN: Gettorr – Stream magnet links in the browser via WebRTC (no install)

https://gettorr.com/
1•BenaouidateMed•24m ago•0 comments

Statin drugs safer than previously thought

https://www.semafor.com/article/02/06/2026/statin-drugs-safer-than-previously-thought
1•stareatgoats•25m ago•0 comments

Handy when you just want to distract yourself for a moment

https://d6.h5go.life/
1•TrendSpotterPro•27m ago•0 comments

More States Are Taking Aim at a Controversial Early Reading Method

https://www.edweek.org/teaching-learning/more-states-are-taking-aim-at-a-controversial-early-read...
1•lelanthran•28m ago•0 comments

AI will not save developer productivity

https://www.infoworld.com/article/4125409/ai-will-not-save-developer-productivity.html
1•indentit•33m ago•0 comments

How I do and don't use agents

https://twitter.com/jessfraz/status/2019975917863661760
1•tosh•39m ago•0 comments

BTDUex Safe? The Back End Withdrawal Anomalies

1•aoijfoqfw•42m ago•0 comments

Show HN: Compile-Time Vibe Coding

https://github.com/Michael-JB/vibecode
5•michaelchicory•45m ago•1 comments

Show HN: Ensemble – macOS App to Manage Claude Code Skills, MCPs, and Claude.md

https://github.com/O0000-code/Ensemble
1•IO0oI•48m ago•1 comments

PR to support XMPP channels in OpenClaw

https://github.com/openclaw/openclaw/pull/9741
1•mickael•49m ago•0 comments

Twenty: A Modern Alternative to Salesforce

https://github.com/twentyhq/twenty
1•tosh•50m ago•0 comments

Raspberry Pi: More memory-driven price rises

https://www.raspberrypi.com/news/more-memory-driven-price-rises/
2•calcifer•56m ago•0 comments

Level Up Your Gaming

https://d4.h5go.life/
1•LinkLens•1h ago•1 comments

Di.day is a movement to encourage people to ditch Big Tech

https://itsfoss.com/news/di-day-celebration/
3•MilnerRoute•1h ago•0 comments

Show HN: AI generated personal affirmations playing when your phone is locked

https://MyAffirmations.Guru
4•alaserm•1h ago•3 comments

Show HN: GTM MCP Server- Let AI Manage Your Google Tag Manager Containers

https://github.com/paolobietolini/gtm-mcp-server
1•paolobietolini•1h ago•0 comments

Launch of X (Twitter) API Pay-per-Use Pricing

https://devcommunity.x.com/t/announcing-the-launch-of-x-api-pay-per-use-pricing/256476
1•thinkingemote•1h ago•0 comments

Facebook seemingly randomly bans tons of users

https://old.reddit.com/r/facebookdisabledme/
1•dirteater_•1h ago•2 comments

Global Bird Count Event

https://www.birdcount.org/
1•downboots•1h ago•0 comments
Open in hackernews

Functional Threading "Macros"

https://aartaka.me/threading.html
67•GarethX•4mo ago

Comments

kazinator•4mo ago
The main problem that threading macros solve is the lack of implicit partial application. If you farm that problem to partial-applicative combinators, you can do it:

  This is the TXR Lisp interactive listener of TXR 302.
  Quit with :quit or Ctrl-D on an empty line. Ctrl-X ? for cheatsheet.
  1> (defun bind1 (fn a1) (lambda (a2) [fn a1 a2]))
  bind1
  2> (defun bind2 (fn a2) (lambda (a1) [fn a1 a2]))
  bind2
We define bind1 and bind2 for binding the left or right argument of a binary function producing a unary function, then:

  3> [chain [bind1 * 2] succ]
  #<intrinsic fun: 0 param + variadic>
  4> [*3 10]
  21
The only wart is you have that explicit bind1.

You can write functions that notice they have fewer arguments than ostensibly required and partially apply themselves. Obviously the standard * can't do that because it's usefully variadic already.

Anyway, in the implementation of TXR, I've done this kind of thing in C, just with function calls: no macros. E.g. in eval.c, certain functions are prepared that the quasiquote expander uses:

static val consp_f, second_f, list_form_p_f, quote_form_p_f; static val xform_listed_quote_f;

  static void qquote_init(void)
  {
    val eq_to_list_f = pa_12_1(eq_f, list_s);
    val eq_to_quote_f = pa_12_1(eq_f, quote_s);
    val cons_f = func_n2(cons);

    protect(&consp_f, &second_f, &list_form_p_f,
            &quote_form_p_f, &xform_listed_quote_f, convert(val *, 0));

    eq_to_list_f = pa_12_1(eq_f, list_s);
    consp_f = func_n1(consp);
    second_f = func_n1(second);
    list_form_p_f = andf(consp_f,
                         chain(car_f, eq_to_list_f, nao),
                         nao);
    quote_form_p_f = andf(consp_f,
                          chain(cdr_f, consp_f, nao),
                          chain(cdr_f, cdr_f, null_f, nao),
                          chain(car_f, eq_to_quote_f, nao),
                          nao);
    xform_listed_quote_f = iffi(andf(consp_f,
                                     chain(car_f, eq_to_list_f, nao),
                                     chain(cdr_f, consp_f, nao),
                                     chain(cdr_f, cdr_f, null_f, nao),
                                     chain(cdr_f, car_f, consp_f, nao),
                                     chain(cdr_f, car_f, car_f, eq_to_quote_f, nao),
                                     nao),
                                chain(cdr_f, car_f, cdr_f,
                                      pa_12_1(cons_f, nil),
                                      pa_12_2(cons_f, quote_s),
                                      nao),
                                nil);
  }
"nao" means "not an object": it's a sentinel value used internally in the runt-time for various purposes, the most common of them being the termination of variadic argument lists.

andf is an and combinator: it returns a function which passes its argument(s) to each function in turn; if anything returns nil, it stops calling functions and returns nil. Otherwise it returns the value of the last function.

The pa_this_that functions are partial applicator combinators, generalizations of bind1 and bind2. E.g. pa_12_1 means take a fucntion with arguments 1 2, returning a function which just takes 1 (so 2 is bound: this is like bind2). A bunch of these exist, and more coud be added if needed: pa_1234_1, pa_1234_34 pa_123_1, pa_123_2, pa_123_3, pa_12_1 and pa_12_2.

adityaathalye•4mo ago
If the language allows passing lists of functions, then `comp` can be implemented by hand: https://clojuredocs.org/clojure.core/comp

And re-implementing `comp` by hand can teach us more than we bargained for (all the way to compiler technology)... I blogged about it here: https://www.evalapply.org/posts/lessons-from-reimplementing-...

  ;; Clojure source code for `comp` (since Clojure v1.0)
  (defn comp
    "Takes a set of functions and returns a fn that is the composition
    of those fns.  The returned fn takes a variable number of args,
    applies the rightmost of fns to the args, the next
    fn (right-to-left) to the result, etc."
    {:added "1.0"
     :static true}
    ([] identity)
    ([f] f)
    ([f g] 
       (fn 
         ([] (f (g)))
         ([x] (f (g x)))
         ([x y] (f (g x y)))
         ([x y z] (f (g x y z)))
         ([x y z & args] (f (apply g x y z args)))))
    ([f g & fs]
       (reduce1 comp (list* f g fs))))
adityaathalye•4mo ago
fogus has a couple of nice little posts on the threading macro itself...

https://blog.fogus.me/2013/09/04/a-ha-ha-ha-aah.html

https://blog.fogus.me/2009/09/04/understanding-the-clojure-m...

adityaathalye•4mo ago
Oh and, the arrow-kt library bolts this onto kotlin.

Utilities for functions: https://arrow-kt.io/learn/collections-functions/utils/

nesarkvechnep•4mo ago
Starts with saying they like Common Lisp but use Clojure daily, then proceeds with some language called "lamber". What?
shawn_w•4mo ago
From the post:

>The language I’m using in this post is Lamber, my Lambda Calculus compiling language. It features a minimalist syntax with only functions, values, if-s, and operators like Wisp’s colon nesting operator and terminating period (similar to Lua’s end.)