A new F# compiler feature: graph-based type-checking

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
  • Fable: F# |> BABEL

    F# to JavaScript, TypeScript, Python, Rust and Dart Compiler

  • https://fable.io/

    Here build times are not really an issue as it seems to be hot-transpiling to js, so save and site is reloaded almost instant (at least small sites):

    My small tools site built with Fable: https://peheje.github.io/compare.html

    If you look at the JS - that's of-course the production minimized build, the transpiled JS is pretty nice and readable.

    Super simple site - vanilla JS seems wonderfully easy with F#, easy to hide its warts and build easy re-usable items.

    But there's of course also smarter stuff with two-way bindings via html annotation and builders etc. I am actually using Feliz.ViewEngine, which is building the HTML using F#, but only for the navigation bar. Might try converting a page to it.

  • elmish

    Elm-like abstractions for F# apps

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • clojure

    The Clojure programming language

  • I have a tangential question that is related to this cool new feature.

    Warning: the question I ask comes from a part of my brain that is currently melted due to heavy thinking.

    Context: I write a fair amount of Clojure, and in Lisps the code itself is a tree. Just like this F# parallel graph type-checker. In Lisps, one would use Macros to perform compile-time computation to accomplish something like this, I think.

    More context: Idris2 allows for first class type-driven development, where the types are passed around and used to formally specify program behavior, even down to the value of a particular definition.

    Given that this F# feature enables parallel analysis, wouldn't it make sense to do all of our development in a Lisp-like Trie structure where the types are simply part of the program itself, like in Idris2?

    Also related, is this similar to how HVM works with their "Interaction nets"?

    https://github.com/HigherOrderCO/HVM

    https://www.idris-lang.org/

    https://clojure.org/

    I'm afraid I don't even understand what the difference between code, data, and types are anymore... it used to make sense, but these new languages have dissolved those boundaries in my mind, and I am not sure how to build it back up again.

  • HVM

    A massively parallel, optimal functional runtime in Rust

  • I have a tangential question that is related to this cool new feature.

    Warning: the question I ask comes from a part of my brain that is currently melted due to heavy thinking.

    Context: I write a fair amount of Clojure, and in Lisps the code itself is a tree. Just like this F# parallel graph type-checker. In Lisps, one would use Macros to perform compile-time computation to accomplish something like this, I think.

    More context: Idris2 allows for first class type-driven development, where the types are passed around and used to formally specify program behavior, even down to the value of a particular definition.

    Given that this F# feature enables parallel analysis, wouldn't it make sense to do all of our development in a Lisp-like Trie structure where the types are simply part of the program itself, like in Idris2?

    Also related, is this similar to how HVM works with their "Interaction nets"?

    https://github.com/HigherOrderCO/HVM

    https://www.idris-lang.org/

    https://clojure.org/

    I'm afraid I don't even understand what the difference between code, data, and types are anymore... it used to make sense, but these new languages have dissolved those boundaries in my mind, and I am not sure how to build it back up again.

  • ApiSurface

    Library to ensure the consistency and documentation coverage of an F# assembly's public API

  • May I plug https://github.com/G-Research/ApiSurface/ ? It ensures this as part of your testing pipeline, and requires an appropriate minor or major SemVer bump if you alter the API in a non-breaking or breaking way.

  • free-vscode-csharp

    Free/Libre fork of the official C# extension for vscode

  • I only tried F# for few days, but it was a pleasant experience on both macos and linux.

    dotnet CLI should take care of build process, it can even generate self-sufficient executable (that bundle parts of .NET in them). The infamous required XML boilerplate has also been cut down to near-zero.

    My biggest gripe is that Microsoft's debugger is closed-source and proprietary (though free for users of official VSCode builds). There is open-source netcoredbg by Samsung, so you can use VSCod[e,ium] with https://open-vsx.org/extension/muhammad-sammy/csharp , but YMMV.

  • sqlx

    🧰 The Rust SQL Toolkit. An async, pure Rust SQL crate featuring compile-time checked queries without a DSL. Supports PostgreSQL, MySQL, and SQLite. (by launchbadge)

  • SQLX has entered the chat [1].

    [1] https://github.com/launchbadge/sqlx

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • manifold

    Manifold is a Java compiler plugin, its features include Metaprogramming, Properties, Extension Methods, Operator Overloading, Templates, a Preprocessor, and more.

  • Nice.

    Java has what looks like SQLx on steroids with the manifold project coming down the pike.

    https://github.com/manifold-systems/manifold/blob/master/man...

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts