Sign in

borar

@borar.bsky.social
83 followers 56 following 181 posts
PostsRepliesMedia
borar @borar.bsky.social · 18/07/2026
Same story, repeated over the years. If it's something F# it's all laughter and jokes. When a similar feature is added to C# it is suddenly the best thing in the world.
030
borar @borar.bsky.social · 03/07/2026
Frankly, I found the whole text somewhat suspicious.
100
Reposted by borar
Haskell programming language @haskell.org · 02/07/2026
Hyperbole 0.7 has been released! The HTMX-inspired framework for interactive web applications now supports multipart file uploads. discourse.haskell.org/t/ann-hyperb... #Haskell
discourse.haskell.org
[ANN] Hyperbole 0.7 - Multipart form file uploads, immediate triggers
hyperbole.live github hackage There were many changes and improvements, but the biggest new feature is Multipart Form file uploads. It works with the default settings using a secure configuration, bu...
0103
borar @borar.bsky.social · 23/06/2026
If I understand correctly, you use Azure "something" (not very familiar, sorry) to serialize concurrent operations. Is it because your system already happens to use Azure for other things? Otherwise a more light-weight and local mechanism could be used as well? Like a mailbox processor.
100
Reposted by borar
gabby @fullmoon.id · 23/06/2026
I wrote up a post that explains how type inference for anonymous records works, including row polymorphism The post is also a gentle introduction to type theory for newcomers: haskellforall.com/2026/06/reco...
haskellforall.com
Record type inference for dummies
Gentle tour of type inference for records
18413
borar @borar.bsky.social · 19/06/2026
Short-circuiting is useful for a rule which can decide the final outcome "on its own". The CE syntax hides all the machinery and makes data dependency between rules easy syntactically. Coming back to your original remark, CPS and its short-circuiting is very much idiomatic and important in FP.
000
borar @borar.bsky.social · 19/06/2026
One of my favorite applications of the continuation type is with domain modeling. It is useful to represent composable rules. For example, a set of rules which together decide whether to apply a discount based on various factors. All rules have the same type and can be combined nicely. #fsharp
110
borar @borar.bsky.social · 19/06/2026
As for the CE, just like with other "computations as values", it makes it easy to use the type by adding some syntactic sugar. So the goal is certainly not to "lure" C# programmers in, or anyone else :)
100
borar @borar.bsky.social · 19/06/2026
The continuation monad and continuation passing style are quite fundamental and important. For example, the main Giraffe HTTP handler type is almost this, but not quite, also supporting "early returns". There are multiple other applications.
100
borar @borar.bsky.social · 19/06/2026
Indeed, the continuation monad is more general, especially the continuation monad transformer. My gist instantiates the transformer for Async because someone asked about early returns in Async some years ago :)
000
borar @borar.bsky.social · 19/06/2026
Cool, glad you found this interesting!
100
borar @borar.bsky.social · 19/06/2026
Another approach for early returns in #fsharp, but specifically for Async computations: gist.github.com/Savelenko/5e...
gist.github.com
Async with early return capability CE for F#
Async with early return capability CE for F#. GitHub Gist: instantly share code, notes, and snippets.
252
borar @borar.bsky.social · 14/06/2026
This is a sub-topic I am going to focus on soon. In my view it is not part of the domain/model. In terms of the Onion architecture, it lives in the Application layer. Use-cases own Fold-s and a Fold uses the building blocks provided by the model. The model does not know anything about records.
100
borar @borar.bsky.social · 09/06/2026
Blog: Basic principles of record storing systema10.org/posts/basic-... #eventsourcing
systema10.org
Basic principles of record storing
110
borar @borar.bsky.social · 08/06/2026
@ursenzler.bsky.social I was catching up on your ES blog articles and read about secondary events. I think this resonates with one of the reasons for the "record" terminology I discuss in my article above.
110
borar @borar.bsky.social · 08/06/2026
A new blog article where I go against the de facto normal: "Event sourcing is record storing" #eventsourcing systema10.org/posts/event-...
systema10.org
Event sourcing is record storing
111
borar @borar.bsky.social · 08/12/2025
Very similar experiences here, only longer and with 10x as many engineers.
010
borar @borar.bsky.social · 27/11/2025
I think #eventsourcing is a bit of a misnomer resulting in much noise and confusion. I've always used the terms "record" and "journal" and propose "record storing" (RS) instead.
000
borar @borar.bsky.social · 25/11/2025
Store (NumberConsumed n) record. When the next number is needed, fold the latest n from the journal, specifically from these records and/or a snapshot. Use the number n+1 and store (NumberConsumed (n+1)) record while detecting concurrent changes to the journal. Retry if a change is detected.
010
borar @borar.bsky.social · 25/11/2025
F# has interfaces with static abstract members (IWSAMs, type-bound) which are one step closer to type classes than regular object-bound interfaces. Still not actual type classes though.
010
borar @borar.bsky.social · 29/09/2025
Not in general.
000
borar @borar.bsky.social · 28/08/2025
What I meant is the term "railroad" is specifically conceived in the F# "world" so it's logical that one does not find it elsewhere. CEs are a concrete language feature which, although similar to do notation, is unique enough. So similarly normal to not see it elsewhere :)
120
borar @borar.bsky.social · 25/08/2025
The first two are F#-specific.
100
borar @borar.bsky.social · 05/06/2025
11 years for me...
000
borar @borar.bsky.social · 08/05/2025
What was the problem or question to solve?
100
borar @borar.bsky.social · 03/04/2025
This is another formulation of my point. Unfortunately the "human factor" seems to be somehow a notion in the software industry. But it is nonsensical in other engineering disciplines. Rightly so, because it comes down to individualistic anti-intellectual stance and that learning is special.
100
borar @borar.bsky.social · 02/04/2025
The "needs" are indeed relevant when we deal with different categories of applications: F# is not better for systems or embedded or game programming, Rust, C, etc. are better. But F# and C# are the same category so the "needs" are the same.
200
borar @borar.bsky.social · 02/04/2025
While I understand the good intentions behind such reocurring statements, I am less careful and "politically" balanced: #fsharp is absolutely inherently better. The "needs" are irrelevant, objective properties are what matters in engineering. Just like precise power tools vs manual mediaval tools.
260
borar @borar.bsky.social · 13/03/2025
I am guessing you mean something like "if/when the last F# programmer leaves"? This is very unlikely, either there are more remaining or others who can pick it up. People can learn things :)
100
borar @borar.bsky.social · 13/03/2025
The right answer is indeed "you don't need to hire F# programmers".
110
borar @borar.bsky.social · 12/03/2025
Even more so, given that the seminal paper on F# computation expressions just uses the monad and monoid terminology extensively, as it should.
000
borar @borar.bsky.social · 12/03/2025
Seq does have bind though, it's only called differently.
000
borar @borar.bsky.social · 10/03/2025
Functional programming and its idioms are the most fitting and sensible interpretation/realization of #eventsourcing. Fold multiple composable values of types provided by the layered model, alongside the use-case specific version, apply model logic, store a new record. "Aggregates" are a mistake.
020
borar @borar.bsky.social · 10/03/2025
The best language for the Web!
000
Reposted by borar
Anupam 🇮🇳《ミ》λ≡ @aj.social.id1.in.ap.brid.gy · 09/03/2025
Why would people use other programming languages for frontend dev when #PureScript is just right there? #FunctionalProgramming
111
borar @borar.bsky.social · 10/03/2025
I think I understood the popularity of "modern" as a term. It embodies the implicit and unconcious understanding that most of the (visible online) software industry is a web of ad-hoc, anti-fundamental knowledge, hype-driven, half-assed ideas which break easily. Then its on to the next "modern".
010
borar @borar.bsky.social · 28/02/2025
And then there is PureScript as well.
040
borar @borar.bsky.social · 27/02/2025
Usually the "mini applications" are easy to recognize and define unambiguosly. Evolution of long-lived business applications follows this as well: a new (business) capability needs to be added, which clearly belongs to the application, but is stand-alone within the problem domain.
100
borar @borar.bsky.social · 27/02/2025
Persistence is also, in general, shared. Some DB tables can be used by multiple components, some are specific to one. With #eventsourcing the journal and the record type is shared.
000
borar @borar.bsky.social · 27/02/2025
Every vertical component has its own data access interfaces (remember, Onion), URL handlers, data access implementation, tests, etc. Vert. components can also share types and functions from "common modules" which are at the "base" of the vert. components. For example the common User type. 🔽
100
borar @borar.bsky.social · 27/02/2025
All use-cases for stock management of scheduling are two other vertical components. Multiple vertical components can have their own models of the same domain notion, tailored at their purpose. A User type appears everywhere, but is more extensive/different in the user management vert. component. 🔽
100
borar @borar.bsky.social · 27/02/2025
A vertical slice, which I usually call a vertical component, is a cake piece going through all layers of the Onion. It is a mini application on its own, in a way, focusing on a set of related use-cases. Not too fine-grained, for example all use-cases of user management is one vert. component. 🔽
200
borar @borar.bsky.social · 27/02/2025
My 5c about this, as always somewhat heretical. "Bounded context" is vague and not really interesting/useful. Vertical slice architecture is not an architecture, but a principle *within* an architecture. In particular, in the Onion architecture (my default). #DDD 🔽
110
borar @borar.bsky.social · 21/02/2025
Only if you are making a fat client and the back-end is merely a thin layer between it and the DB and other infra.
000
borar @borar.bsky.social · 20/02/2025
Maybe thou pure just followeth m, returneth to sanity of m.
000
borar @borar.bsky.social · 17/02/2025
I see. What is the difference with a function returning a Lazy and possibly performing side-effects?
000
borar @borar.bsky.social · 15/02/2025
Once evaluated, Lazy always returns the same value without re-evaluation. Does this "caching" also happen here?
100
borar @borar.bsky.social · 15/02/2025
Having said that, PureScript is like you are suggesting: F# 'match <exp> with' in PureScript is 'case <exp> of' and 'function' is simply 'case _ of'.
000
borar @borar.bsky.social · 15/02/2025
A function in its nost basic representation, as learned at school, is a table with two columns. From this point of view, the 'function' keyword and what follows it makes total sense.
100
borar @borar.bsky.social · 11/02/2025
Just to be sure, are you compiling in the release mode with tail call optimization turned on? Secondly, did you try making the nested function a top-level one?
100