Jordan Marr's Avatar

Jordan Marr

@jordanmarr.bsky.social

Spreading the gospel of F# https://github.com/JordanMarr

341 Followers  |  179 Following  |  82 Posts  |  Joined: 12.11.2024  |  2.1171

Latest posts by jordanmarr.bsky.social on Bluesky

Glad it helped!
Sounds like an interesting idea.

22.10.2025 22:49 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Long files in F# don’t bother me. But I am always open to the idea of refactoring if it makes sense.

One thing i hate in most C# codebases is having code split between so many files.

F# makes it easier to have less files which I think is usually better.

14.10.2025 00:22 β€” πŸ‘ 6    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0

I think that you generally do want to keep the view stuff in the view fn rather than in the update fn. However, I have become more pragmatic over the years, and Elmish does include Cmds / effects for a reason.

Also, I don’t want to clutter my model with transient toast message mechanisms.

14.10.2025 00:13 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

I see toasts as a feedback mechanism to make the page more responsive. They are transient and not necessarily part of a requirement.

OTOH, I add less transient results to the model, like for example an ImportSummary. Usually results that are part of a requirement or that I want to test.

13.10.2025 23:49 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Your thread inspired me to create a blog post on the subject.
Hopefully it helps!

bsky.app/profile/jord...

05.10.2025 19:40 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Tips for Unit Testing Fable Apps using .NET

Blog post: Tips for unit testing #fsharp Fable apps using .NET:
jordanmarr.github.io/fsharp/unit-...

05.10.2025 19:37 β€” πŸ‘ 17    πŸ” 5    πŸ’¬ 3    πŸ“Œ 1

I think you chose a good path using Fable-to-TS. Bindings are a tradeoff that I think *can* be worth it for FT, long term projects if you don’t mind occasionally adding here and there as needed. But as always - it just depends.

05.10.2025 16:35 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Maybe Glutinum can get it close enough for Claude to take over?

05.10.2025 12:38 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

I test my Fable Elmish logic on the. NET side.

05.10.2025 03:58 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
Release v1.0.0 Β· JordanMarr/SqlBulkTools.FSharp Changes SqlBulkTools.FSharp v1.0.0 now uses Microsoft.Data.SqlClient instead of System.Data.SqlClient. SqlBulkTools.FSharp now relies on a the "fretje.SqlBulkTools" fork since the original package...

SqlBulkTools.FSharp v1.0.0 is released!
github.com/JordanMarr/S...

28.09.2025 16:07 β€” πŸ‘ 5    πŸ” 1    πŸ’¬ 0    πŸ“Œ 0

FSharp.SystemComandLine v2.0.0-beta7 is released!

This adapts to API changes in the new System.CommandLine v2.0.0-beta7.
#fsharp

github.com/JordanMarr/F...

17.08.2025 15:38 β€” πŸ‘ 10    πŸ” 1    πŸ’¬ 0    πŸ“Œ 0
Preview
Release SqlHydra.Cli v3.1.0 Β· JordanMarr/SqlHydra PostgreSQL support for .NET network address types #120 (thanks @64J0!) System.Net.IPNetwork System.Net.IPAddress System.Net.PhysicalAddress Misc Entire test suite is now run on all PRs #120 (tha...

SqlHydra v3.1 is released! #fsharp
github.com/JordanMarr/S...

16.08.2025 15:58 β€” πŸ‘ 7    πŸ” 1    πŸ’¬ 0    πŸ“Œ 0
Post image

I just refactored a bunch of tests with large, inline JSON strings to files using the awesome "EasyBuild.FileSystemProvider" type provider by @mangelmaxime.bsky.social. #fsharp

(The JSON strings were using up mah tokens!)

github.com/easybuild-or...

15.07.2025 21:20 β€” πŸ‘ 7    πŸ” 2    πŸ’¬ 0    πŸ“Œ 0

No matter how many times I do it, I can never remember the sequence of git commands and cryptic arguments needed to sync my commits to an upstream repository over time. This has probably become my most repeated AI chat request.

14.07.2025 19:13 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Here is an excerpt from CC's `init` generated markdown summary:

Key Patterns:
Functional Core, Imperative Shell: F# domain logic with C# AutoCAD adapters
Domain-Driven Design: Rich domain models with business logic encapsulated
Immutable transformations: Raceway modifications return new instances

14.07.2025 17:26 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

I totally agree. Claude Code has been amazing with F#.
Creating a spec to modify domain code can be an added layer of indirection, and is less precise than just writing the code.
F# domain logic is so expressive that it is a spec unto itself. This is evidenced by how well CC summarized my project.

14.07.2025 17:26 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Post image

Look ma' no esbuild, no cdn, and somewhat editor tooling support! (you wouldn't believe how much the tooling "just works" when your dependencies are stored in a "node_modules" directory)

#dotnet #fsharp #webdev #spa #importmaps

14.07.2025 04:23 β€” πŸ‘ 3    πŸ” 1    πŸ’¬ 1    πŸ“Œ 1

Cool! How did you work around the directives? Which project was it?

13.07.2025 23:43 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Funny enough, I considered using the FS+ lenses recently until I noticed the Fable target had been commented out. (Which of fine since I ultimately decided against using lenses anyway.)

13.07.2025 15:07 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

I think the the maintainer should do whatever they think is best for the project. People have the option to use an older version or fork it.
OTOH, dropping targets will likely cause consternation for some users.
I saw this recently in a project that dropped support for netstandard (for no reason).

13.07.2025 15:07 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Post image

The new `tryParse` fn in FSharp.SystemCommandLine makes it easy to parse any input type using the F# Result type for built-in validation. Perfect for parsing discriminated unions, or... anything. #fsharp

13.07.2025 03:42 β€” πŸ‘ 13    πŸ” 5    πŸ’¬ 1    πŸ“Œ 0

I haven’t used the free version, but the paid version w/ Claude 4 Sonnet is awesome.
Hallucinations are pretty rare IME.

02.07.2025 06:08 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

It sounds like you are giving very general instructions because you are unfamiliar with the front end space. For this reason, I do think Fable -> TS will yield the best results.

Also, +1 to Claude Code over Copilot.

30.06.2025 15:08 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

The third party devs helping me on a large F#/C# codebase have learned on-the-fly with the help of AI and zero coaching from me.

29.06.2025 21:28 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

That may be the best of both worlds because you have type safety, and still have the ability to create complex logic in F# that you can call from TS.
But, I really enjoy using Fable so I could go either way.
(3/3)

28.06.2025 21:26 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

With that said, you can also have Fable compile to TS which would allow you to generate your shared types as well as any complex logic that you want to share with the front end. Then your AI can do its thing with TS and still utilize your F# > TS code. (2/3)

28.06.2025 21:26 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

I own multiple enterprise Fable apps and have considered writing my next project using F#/TS for the reasons you listed. I was leaning towards TS, but...
I have zero problems with AI + F#. Also, the F# type system provides protection from AI mistakes. Using Fable for shared types helps a lot. (1/3)

28.06.2025 21:26 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Preview
Release v2.0.0-beta5 Β· JordanMarr/FSharp.SystemCommandLine This release provides compatibility with the latest System.CommandLine v2.0.0-beta5 rework! New Input API Old: let unzipFile = Input.Argument<FileInfo>("The file to unzip") let outputDir = Input.Op...

FSharp.SystemCommandLine v2.0.0-beta5 is released!
This adapts to the recent overhaul of System.CommandLine v2.0.0-beta5 and also adds some cool new features. πŸ₯³ #fsharp

github.com/JordanMarr/F...

26.06.2025 16:42 β€” πŸ‘ 11    πŸ” 3    πŸ’¬ 0    πŸ“Œ 0
Post image

I want to deprecate the original Input methods (commented out below) with something a little more "fun".

This would eliminate confusion from overload soup, and I think this would be easier for people to extend to their liking. #fsharp

22.06.2025 21:36 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Preview
Comparing main...beta5 Β· JordanMarr/FSharp.SystemCommandLine Contribute to JordanMarr/FSharp.SystemCommandLine development by creating an account on GitHub.

Making good progress so far. Just need to understand the changes to the pipeline configuration API (which doesn't seem to be mentioned in the migration guide at glance) and rework the Input.Option and Input.Argument overloads.

github.com/JordanMarr/F...

21.06.2025 16:33 β€” πŸ‘ 3    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0

@jordanmarr is following 20 prominent accounts