this post was submitted on 29 Jan 2026
37 points (97.4% liked)

Programming

24969 readers
579 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities !webdev@programming.dev



founded 2 years ago
MODERATORS
 

I hear they are good, make it easier to maintain code-bases. Most often I reach for python to get the job done. Does anyone have experiences with functional languages for larger projects?

In particular I am interested to learn more on how to handle databases, and writing to them and what patterns they come up with. Is a database handle you can write to not ... basically mutable state, the arch-nemesis of functional languages?

Are functional languages only useful with an imperative shell?

you are viewing a single comment's thread
view the rest of the comments
[โ€“] TehPers@beehaw.org 2 points 5 days ago (1 children)

Is a database handle you can write to not ... basically mutable state, the arch-nemesis of functional languages?

Access to an external database is a kind of effect. In functional terms, you'd use a monad to represent this, though in Koka you'd define an effect for it. In either case, it becomes part of the function signature.

A "pure" function could instead work around it by returning (without executing) a query, accepting a state and returning a new, modified state, or otherwise returning some kind of commands to the caller without directly querying the database.

[โ€“] Oinks@lemmy.blahaj.zone 3 points 4 days ago* (last edited 4 days ago)

A "pure" function could instead work around it by returning (without executing) a query, accepting a state and returning a new, modified state, or otherwise returning some kind of commands to the caller without directly querying the database.

At least in Haskell due to lazyness this is (almost) always what happens. A monad is just one kind of deferred computation, with an operator >>= ("bind") that happens to prevent compiler reordering or deduplication. Any IO actions are only executed when main is evaluated and no earlier. Strict functional languages to my knowledge don't need monads to do IO since they don't have the same issues with evaluation order that Haskell does (though they might want them for type safety purposes).