The Clean Language
clean.cs.ru.nl
clean.cs.ru.nl
In simplistic terms, Clean seems to be a “better Haskell”.
Edit: I just downloaded the bundle tar, looked at some sources and found out that vim has syntax coloring for Clean out of the box. Vim never ceases to amaze me.
More Edit: Clean transpiles to C, which means that when you look at generated code, or just disassemble the resulting binary, you will probably be able to make sense of what you see. When I disassemble a Haskell binary, I can't make heads or tails of it.
[1] https://sis.ru.nl/osiris-student/OnderwijsCatalogusSelect.do...
I wonder how it's better than Haskell, why not Idris/Coq/Adga, and why not contribute to any of the just mentioned projects. This info, combined with some code and a description of the target audience of the project would be very helpful indeed.
[1]: https://en.wikipedia.org/wiki/Clean_(programming_language)
I don't think anybody claims it's better than Haskell. It predates it, for one. The Clean programming language is its own thing, with its own philosophy, uniqueness types, etc.
Don't be mislead by the usual online flamebait trying to turn everything into "X is better than Y". This is usually claimed by people with little experience in either X or Y.
Actually Haskell is a better (or at least, standardised) Clean.
There was a lot of interest in lazy functional programming in the 1980s, but everyone made their own mutually-incompatible systems (e.g. Clean, Miranda, and I heard that even Scheme was debating laziness at one point).
Eventually a committee came together to standardise on a single language (which could be extended in interesting ways). The result was Haskell.
Edit: I don't know about Scheme debating laziness as such, but there's Friedman and Wise https://help.luddy.indiana.edu/techreports/TRNNN.cgi?trnum=T... and there was Lispkit Lisp, as in Hoare's CSP book.
As one example, Clean did not support non-latin1 alphabets in the UI library and my attempt to somehow correct the situation was in vain, the next release of the language did contain the same error. In contrast, when I discovered non-linear (at least quadratic) behavior in relatively fringe case of type checking algorithm in ghc, it was corrected quite quickly.
As per language themselves, Clean purported to have uniqueness types which should make programming better and easier and Clean developers came with special syntax to reuse same names during processing unique-typed values. Which is essentially a Haskell's do notation in disguise, except it cannot be used for different purposes, like non-deterministic List monad. At about 2008 or slightly earlier, type system of Haskell became powerful enough to erase bindings from environments (famous HList by Oleg Kiselyov), allowing one to express many things, including linear and unique types (example [1] - if state's parameters can change number of bindings, we can check for bindings' erasure, expressing linear (all bindings are erased, except ones returned) and unique (some bindings can be left) types).
[1] http://blog.sigfpe.com/2009/02/beyond-monads.html
I keep saying what is language feature in regular programming languages is a library in Haskell. Clean is no exception.
Also, the average Haskell developer practically exists for the purpose of fixing quadratic behaviors in type checkers; you file that bug at 3 a.m. on December 25, and by 8 you have a shiny fix under the tree.
The code I've asked contains two calls instead of one, aside of that it was quite simple and would allow at least Russian users of Clean to have proper dialog titles.
I guess it is nothing like "major piece of work". It was a fix for peculiarities of Windows UI of that era - dialog titles required different approach than dialog fields.
I wouldn't really advise anyone to learn it since Haskell is superior in almost every way.
(Let it be Microsoft or Google, for bonus points.)
[1] https://clean.cs.ru.nl/download/html_report/CleanRep.2.2_11....
Uniqueness types are similar to to linear types (as found in Idris, ATS, and recently Haskell), and similar to Rust's 'ownership' model ("affine types"?)
I was very interested years ago, but I kept on thinking that without opening up it would eventually just fade into oblivion and never went beyond the toying phase. A common fate for the many languages with a single and commercial reference compiler/interpreter.
Is there a Clean or Idris program somewhere I can have a look at?
https://www.mercurylang.org/information/doc-latest/mercury_r...
useful for things like file descriptors. The type system will, for example prevent sharing of your file descriptors between threads.
Clean and Mercury are both mentioned in: https://en.m.wikipedia.org/wiki/Substructural_type_system
Same as with a lot of FOSS software which has a really long essay as explanation but not one screenshot of the GUI
Do I remember this correctly? Does anyone know/remember?
From looking at https://gitlab.science.ru.nl/clean-and-itasks/clean-ide/-/co...
- Clean used to be dual licensed: commercial license + LGPL
- 3 years ago LGPL was replaced by Simplified BSD
- 7 months ago the commercial license was removed> December 12 2019: Programming Languages in the Netherlands