How has Haskell changed?

The history of the language, including major milestones and design decisions, is described in A History of Haskell: being lazy with class. @INPROCEEDINGS{Hudak07ahistory, author = {Paul Hudak and John Hughes and Simon Peyton Jones and Philip Wadler}, title = {A history of Haskell: Being lazy with class}, booktitle = {In Proceedings of the 3rd ACM … Read more

What to use instead of a main loop in Haskell?

This is fine; no stack overflow will occur. Stack overflows in Haskell (and, indeed, any non-strict language) are different to those in other languages; they arise from accumulating large values without ever evaluating them, but you’re not accumulating anything here; just sequencing an infinite chain of actions. You can think of it like this: Once … Read more

Current state of Haskell soft real-time

So the concern for “real time” is the latency introduced by GC collections. GHC uses a multicore garbage collector (and there is a branch with per-thread local heaps). Originally developed to improve multcore performance (each core can collect independently) by reducing the cost of frequent stop-the-world synchronisation, this happens to also benefit soft-real time for … Read more

Idris eager evaluation

We say Idris has strict evaluation, but this is for its run-time semantics. Being a fully dependently typed language, Idris has two phases where it evaluates things, compile-time and run-time. At compile-time it will only evaluate things which it knows to be total (i.e. terminating and covering all possible inputs) in order to keep type … Read more

What’s the relationship between profunctors and arrows?

What profunctors lack compared to arrows is the ability to compose them. If we add composition, will we get an arrow? MONOIDS This is exactly the question tackled in section 6 of “Notions of Computation as Monoids,” which unpacks a result from the (rather dense) “Categorical semantics for arrows”. “Notions” is a great paper because … Read more

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)