I adore #Haskell and #Purescript and I’m very tired of using the brilliant but utterly BRITTLE #bash in the context of #Nix and #nixos infrastructure. Bash isn’t lazy, it’s not purely functional, and it commits the sin of “everything is a string”!

So, I forked a REALLY cool scripting language called #HellLanguage and added Nix-specific functionality to fully replace bash. #nixhell

I’ve already gotten quite far to the point that it is usable.

Current progress here:
https://github.com/harryprayiv/nix-hell/tree/phase2

GitHub - harryprayiv/nix-hell at phase2

Haskell-based shell scripting language (extended to work as an alternative nix scripting language) - harryprayiv/nix-hell

GitHub

@hongminhee I still write JS because it has a specification. When I adventure into implementation-defined languages for the browser, I use #PureScript

I had great hopes for TypeScript when they were still maintaining the specification, but I dropped it once their solution to implementation drifting from specification was to retire the specification.

---

Also, I come from the camp that the only real type system is a static type system, like Pierce in "Types and Programming Languages".

I have an algebraic data type for an AST, which takes a type parameter for the type of expression that the AST holds. I’m writing a function which walks the AST, transforming certain nodes, but always keeping the types of the nodes the same. For example, I can provide this function a function for transforming identifiers (like for renaming them), but the transformer has to return another identifier. The outer structure of the AST stays the same. This is important because I only want to specify transformation functions for the “interesting” cases, and allow the majority of cases to use a default transformer which does nothing more than traverse down the node’s children.

What would you name such a thing? I wouldn’t call it “map” because it doesn’t change the type parameter. It’s not “fold” because it doesn’t have the ability to vary the return type at all. It might be a special case of some other morphism, which would be helpful, but I’m not seeing it.

#FunctionalProgramming #haskell #purescript

I want to be your next #FediHire !

I've been a programmer since 1985 (as a child), I've been an IT professional since 1995 (pulling wires and swapping cards and configuring MS Windows). I graduated from University of Arkansas Fayetteville with a BS in CS in December of 2003. A full resume is available.

I am currently splitting my time between Fayetteville, Arkansas and Cove, Arkansas but I am open to relocation for the right position. My last two positions were 100% remote so I work well on asynchronous teams.

I prefer something where I can be a high-performing individual contributor: reading, writing and improving source text the majority of my day, with some time spent knowledge-sharing with other developers -- learning and teaching. I'd like to work with #Haskell, #Purescript, or #Idris as the primary source language, but I can be productive in almost any language (no PHP, please; I promised myself never again).

I would prefer W-2 employment with a base salary of at least 130k USD/yr, plus some sort of retirement offering (401k or similar) and healthcare benefits (HDCP + HSA or similar). But, I will certainly give due consideration to other compensation packages.

(Boosts appreciated.)

If you haven't heard, the #purescript build tool #spago recently has a major 1.x release.

In celebration of this I wanted to reaffirm my financial support of the project, since I don't have time/skill to contribute labor.

I *thought* I was supporting the project on liberapay, but I could find it on my giving page.

EDIT: https://opencollective.com/purescript

PureScript - Open Collective

Help fund infrastructure for PureScript, a strongly-typed functional programming language that compiles to JavaScript

純粋関数型言語ではconsole.log("Hello")をlog "Hello"と書くし、foo = 42をwrite 42 fooと書く
https://qiita.com/hiruberuto/items/4d8a4739cd738c425ee2?utm_campaign=popular_items&utm_medium=feed&utm_source=popular_items

#qiita #JavaScript #Haskell #purescript

純粋関数型言語ではconsole.log("Hello")をlog "Hello"と書くし、foo = 42をwrite 42 fooと書く - Qiita

いわゆる純粋関数型プログラミング言語は、「状態や作用を扱うことはできない/難しい/面倒」といわれることもあります。でも、たとえばJavaScriptでコンソールにHelloを出力するには、 JavaScript console.log("Hello") と書く一方で、...

Qiita
Not in Bangalore but want to attend an #FPIndia meetup? No problems! Join us for an online meetup open to all. RSVP at hasgeek.com/fpindia/fpin... #FunctionalProgramming #India #Meetup #Haskell #PureScript #Erlang #Scala #OCaml #TypeScript #Rust #Clojure

FPIndia Online - Feb 2026
FPIndia Online - Feb 2026

FPIndia Online Meetup for the month of Feb 2026

Until #UnisonLang takes over, #Nix is amazing.

I just converted my non-deterministic build system from ‘cabal build’ and ‘spago build’ to ‘nix build ‘in like three hours. Now, I can deploy this anywhere as a self-contained VM. I’m still brainstorming the ramifications of this.

Thanks to #pursnix and #IOG #IOHK #HaskellNix

#Haskell #Purescript #Deku #Hyrule #FRP #postgres

https://github.com/harryprayiv/cheeblr/commit/2dda5b2939914ea97ca1878b96c1db48a706ba49

it works! purescript and haskell builds using Nix. NICE! · harryprayiv/cheeblr@2dda5b2

Functional Reactive Purescript Deku/Hyrule PoS System for Cannabis Dispensaries - it works! purescript and haskell builds using Nix. NICE! · harryprayiv/cheeblr@2dda5b2

GitHub
Announcing our first offline meetup for 2026! #FPIndia #Bangalore #Meetup! Talk submissions are also open. Please RSVP if you wish to attend: hasgeek.com/fpindia/bang... #Haskell #PureScript #Elixir #Erlang #Scala #Clojure #India #FunctionalProgramming

Bangalore FP January 2026 meet...
Bangalore FP January 2026 meetup

Bangalore FP January 2026 meetup

@leobm and here a version in #purescript ```specialAvg :: Array Int -> Int
specialAvg ints = case length withoutMinMax of
0 -> 0
_ -> sum withoutMinMax / length withoutMinMax
where
startValue = fromMaybe 0 $ head ints
minv = foldr min startValue ints
maxv = foldr max startValue ints
isNotMinMax v = (v /= maxv) && (v /= minv)
withoutMinMax = filter isNotMinMax ints```