Micah Cantor
banner
micahcantor.bsky.social
Micah Cantor
@micahcantor.bsky.social
Software engineer @ Rinse • Grinnell College '24 • Washington, DC
https://micahcantor.com
Not sure what you need exactly but I know you can use it to give each device a stable ip address. If everything is on the Tailscale network you can use those addresses
October 28, 2025 at 10:32 PM
Tailscale?
October 28, 2025 at 10:10 PM
Haskell’s error messages are horrific. Their language is mostly aimed at a very academic audience and is one of the main reasons the language is so inaccessible.
July 19, 2025 at 9:07 PM
Racket's slideshow package is fun

docs.racket-lang.org/slideshow/
Slideshow: Figure and Presentation Tools
docs.racket-lang.org
April 18, 2025 at 3:04 PM
Analogous in a way to cursive handwriting
April 7, 2025 at 6:39 PM
Abstract syntax trees but they’re actually made out of…published abstracts?
February 4, 2025 at 10:15 PM
Probably you should use vector (hackage.haskell.org/package/vector) or Text.

And if you need efficient add/delete then maybe IntMap (hackage.haskell.org/package/cont...)
Data.IntMap
hackage.haskell.org
January 20, 2025 at 2:43 AM
Emacs lisp would be another example, though that language is uglier than scheme
January 17, 2025 at 3:37 AM
GNU guix basically takes this to the logical extreme. It’s a whole OS that is configurable and scriptable in Scheme.
January 17, 2025 at 3:35 AM
There is mutation via set! in Scheme but it’s easily avoidable and not idiomatic.

But otherwise it seems to meet your criteria. Easy to parse, human-readable, embeddable, interpretable.
January 17, 2025 at 3:34 AM
Is this just Scheme?
January 17, 2025 at 3:11 AM
(Or replace unit with the fields of the type you’re creating)
January 10, 2025 at 10:32 PM
It’s annoying, but can be alleviated by following the pattern of wrapping *all* types in a module, and then exposing a function create : unit -> t from that module.

Particularly important for record types because otherwise type inference sucks ass
January 10, 2025 at 10:31 PM
For all the excitement about RAG in the LLM space, enriching the context of code generation with static analysis (whether it be something like control-flow or typechecking) oddly seems to be relatively unexplored so far.
December 30, 2024 at 7:56 PM
Yikes. Somehow one of the only language tooling this makes more sense for 🙃
December 28, 2024 at 1:33 PM
I’m assuming Haskell? Are you using different ghc versions for the LSP and cabal/stack?
December 28, 2024 at 1:30 PM
December 21, 2024 at 10:38 PM
I'm a little behind now, but here's day 4! #AdventOfCode
December 21, 2024 at 7:26 PM
I’ve thought a bit about syntax sugar that turned method syntax into module qualified syntax. In OCaml terms, suppose it was required that every module exposed a type t.

Then you could have lst : t and turn lst.map(f) into List.map(lst, f)

Basically UFCS but with a standard module structure
December 12, 2024 at 6:47 PM
No it doesn’t. My comment wasn’t very clear but I meant that since you don’t need to create a new file to created a namespaced modules in OCaml, it’s easier to avoid circular imports by just putting code that uses the same types in the same file (but still different modules)
December 8, 2024 at 3:40 PM
I admit it’s ugly but I have done in Haskell to avoid cyclic imports, mainly when I wanted to annotate functions using the same types but otherwise separate functionality into separate files. It’s part of why I much prefer OCamls modules.
December 7, 2024 at 10:17 PM