HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
purescript-concur
purescript-concur-react
PureScript2018–2021
purescript-concur / purescript-concur-react

purescript-concur-react

Concur UI Framework for Purescript

3Distinct people
7Mentions
0Explicit recommenders
272GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Concur UI Framework for Purescript

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 5:04:57 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year7 dated mentions

Observed mentions: 2018-07-24 13:38:41 UTC to 2021-06-02 13:57:30 UTC.

012342018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20182019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments20192020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2021

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC101
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC404
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC000
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC202

What Hacker News says

4 sources
Tangential, but some very cool things are happening in Purescript-land, especially when it comes to row types or UI research: * https://github.com/natefaubion/purescript-variant (open variant types) * https://github.com/natefaubion/purescript-run (extensible effects implementation based on purescript-variant) * https://github.com/ajnsit/purescript-concur (time-reifying UI framework, there's also a Haskell and a JS implementation of Concur) * https://github.com/arthurxavierx/purescript-comonad-ui-todos (comonadic UIs) * https://github.com/paf31/purescript-purview (incremental lambda calculus UI library, this is mind blowing!) * https://github.com/paf31/purescript-sdom (declarative diff-less UI library) There's also [0], a mature UI framework used in production at Slamdata. Lumi [1] are writing their frontend in Purescript. What I especiall
Read the rest
y like about Purescript is that the community is open to experimentation, while at the same time not being afraid to backtrack when things turn out to be a bad idea, like the row tagged Eff monad. The recent addition of QualifiedDo is a good example of this, which allows you to rebind >>= in the following manner: test :: forall m a. I.IxMonad m => m a a String test = I.do a <- I.pure "test" b <- I.pure "test" I.pure (a <> b) Imo, there simply is no better way for a Haskeller to target JS at the moment. [0] https://github.com/slamdata/purescript-halogen [1] https://www.lumi.com
In Purescript-native can now target Golang
I wrote a UI framework called Concur which is very similar to immediate mode UIs and hence very easy to use, but also scales fantastically well to complex UIs. The original code was written in Haskell (https://github.com/ajnsit/concur), and then ported to Purescript (https://github.com/ajnsit/purescript-concur), and even Javascript (https://github.com/ajnsit/concur-js). There's an introduction/tutorial here - https://github.com/ajnsit/concur-documentation/blob/master/R...
In Immediate Mode GUI
Edit: I changed my response after I took the time to understand what you meant. Concur has a very uniform programming model where you do everything by composing widgets. `elm` is a widget. `render` also is a widget. As such both can perform arbitrary async effects, and they take place inside event handlers, or inside lifecycle methods like componentWillMount. Concur takes care of managing that for you. So to log all actions to the console, you can add a logging call to `elm`. elm render update = go where go st = do action <- render st liftEffect (log ("Action - " <> show action)) go (update st action) Meanwhile, the render function itself can be a widget which performs side effects - view = do evt <- button [onClick] [text "Click me"] liftEffect (log "Button was clicked") retu
Read the rest
rn evt There are lots of examples of effects in the Concur repo - Take a look at some running examples here - https://github.com/ajnsit/purescript-concur/blob/master/exam... And running demo - https://ajnsit.github.io/purescript-concur/
In IBM releases Elm-powered app
Shameless plug - I'm trying to improve upon Elm and React's programming model with my Concur UI framework. Its programming model is a bit unusual, it uses Monads to sequence widgets in time, but it is designed to be extremely simple to use, and you don't need to actually understand Monads to use it. An advantage is that it's not artificially restricted like Elm, and allows you to use advanced Functional Programming tricks when you can and want to. It is available for [Haskell](https://github.com/ajnsit/concur), [Purescript](https://github.com/ajnsit/purescript-concur), and [Javascript](https://github.com/ajnsit/concur-js) (so no need to learn a new language), and also allows using external React components. The Javascript version uses Async Generators as a substitute for Monads. With Concur, you can implement the entirety of Elm architect
Read the rest
ure with a few lines of idiomatic code. Purescript or Haskell - elm render update = go where go st = do action <- render st go (update st action) Or in JS - function elm(render, update){ var go = async function*(st) { action = yield* render(st); yield* go(update(st, action)); }; return go; }
In IBM releases Elm-powered app

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.