Started learning PureScript by going through “PureScript by Example” (I think Dustin Whitney’s version is the most up to date version), and as it is pretty dense, I am taking detours from time to time to connect the dots via the Haskell Book, A guide to the PureScript numeric hierarchy (a huge help for someone like me without formal math background!) and Bartosz Milewski’s Category Theory for Programmers (github com/hmemcpy/milewski-ctfp-pdf).
I love how granular PureScript’s type system is, and would like to read more about their theoretical backgrounds, but I am having trouble finding any papers on them. For example,
purescript-control's type class hierarchy has
Extend etc. that have no corresponding classes in Haskell, for example. The documentation is clear though, for example
* -> * kinded types, but I haven’t met these anywhere else before. (Not a surprise as I’m just starting out, and these may be named differently elsewhere).
Thank you for the help!
Regarding why PureScript’s typeclass hierarchy is so granular, I always refer to Phil’s blog post: https://blog.functorial.com/posts/2015-12-06-Counterexamples.html
Lately I’ve been discovering that having
Applicative separate (without implementing
Monad) is very useful for validation (aka obtaining better errors in general – compiler type errors, in my specific area of interest).
If you’re interested in the theory of how typeclasses are designed, I don’t know if there is a single paper that addresses it, but I bet there’s papers that address the features – the general requirement for uniqueness of instances and how type “heads” are matched, functional dependencies, and now instance chains. Overlapping and orphan instances are two concerns that also fit into the discussion.
@kritzcreek wrote a thesis that is a good resource that explains how solving typeclasses works.
And while we’re on the subject of the various typeclasses, I like this article a lot: http://conal.net/papers/type-class-morphisms/
The more granular hierarchy is not in Haskell’s standard library (
base) but my impression is that the design was largely inspired by similar efforts in Haskell - in particular, the
semigroupoids package. I don’t know much about their theoretical background but I imagine the
semigroupoids package is probably a good place to start.
Mitchell has a nice listing of papers here: https://mitchellwrosen.github.io/haskell-papers
On the theoretical side, here’s one on how fundeps work: https://gkaracha.github.io/papers/fundeps.pdf (I haven’t read it)
And this paper covers a slew of typeclasses, but it doesn’t explain their reasoning in depth, mostly covers their free constructions: https://lirias.kuleuven.be/bitstream/123456789/499951/1/main.pdf (I’ve read it but honestly can’t summarize it)
Thanks a lot for all the resources! I am all set with reading materials for the next couple months:)