The front-end is written in PureScript; I renamed source files from *.purs to *.hs to get online syntax highlighting.
PureScript is very similar to Haskell, but differs in several aspects. It is strict, and uses a somewhat different typeclass hierarchy and naming. Notably
Effect is equivalent to Haskell IO. For example, console.log has type String -> Effect Unit (docs)Aff is an asynchronous effect monad. For example, an AJAX request would return Aff (Either Error ResponseType) (docs).# is flip ($)<#> is flip <$>Unit is ()PureScript also heavily encourages writing total functions. For example, an array indexing function returns Maybe a. For partial indexing, one must use unsafeIndex together with unsafePartial - quite a bunch of loops to jump through. This repo doesn't use any partial functions.
The application serves for data visualization purposes. Data is served by a Rust back-end from a database; the front-end uses several simple GET endpoints to get the data. The website is made using the Halogen library; it is single-page, and includes proper routing. I made a screenshot for illustration.
Since this is a simple application, I didn't bother with any sort of effect management; everything effectful is in the Effect or Aff monad. If the application were to grow more, I would probably go for the "three-layered cake" architecture with a ReaderT Env Effect at the bottom.
Also, error handling is crude. For example, most remotely-fetched state is inside Maybe, but this doesn't represent errors in any way. They are simply written out to console instead. I just couldn't be bothered to do it properly :)
Here are some interesting files: