Name: Anonymous 2015-10-14 7:24
Isn't it hilarious? But the real question is, why are Haskallers so stupid? seriously, it's almost like they want to shit all over what took them decades to build...
I think this is the right time for me to exit:
The truth is, I still can't bring myself to use a version of Haskell post
the Foldable-Traversable-aPocalypse, let alone some future Haskell after
the changes now in the works. My personal machines are all still 7.8. My
personal projects are all pre-FTP. The Haskell I love to code in, the
Haskell I'm passionate about, the Haskell I've advocated for real world
use, and the Haskell I like to teach, is 7.8, pre-FTP.
It's not that I'm dead set against change and evolution in a language, or
even breaking changes. But FTP and beyond are changes that have lost the
balance that Haskell had between abstraction and clarity, between elaborate
and practical engineering. I don't see any restraint going forward, so I'm
getting off the train.
This puts me in an odd position with respect to Haskell Platform: I find
myself building the Platform for a version of Haskell that I don't use.
This isn't healthy for either the Platform or me. Hence, I'm resigning as
release manager.
I am sad because I believed that Haskell's path to much wider adoption was
within reach. Now, especially with the ramping up of the Haskell Prime
committee, which seems preordained to codify FTP and beyond into standard,
we are approaching our Algol 68 moment: Building a major language revision
with less opportunity than it's predecessor.
I'll still see you 'round at meet-ups and conferences. I'll just be coding
with an older accent.
- Mark "mzero" Lentczner
SPJew
wants to make FOLDABLEtm and TRAVERSABLEtm into fundamental type classes and forces everyone to learn their interfaces, so that it's in turn possible to force absolutely everything to implement them. ``Everything is a FOLDABLEtm! Everything is a TRAVERSABLEtm!''. A new ``paradigm'' right here shoven deep into the old Haskal dogs' throats.spj has no part in thisExcept he was the one who initiated this shitfest in the first place[1]:
Below is a tentative list of such changes. This is offered as_______________________
the beginning of a discussion rather than a final proposal per
se. As part of the proposal, we should solicit feedback from
the community at large (not just on this list) as well as the
haskell' committee in order to ensure that we do as much as we
can to clean things up. In particular, it'd be good to assemble
the list of complaints/proposals prior to trying to resolve the
details of any particular one, similar to the haskell' process
I suppose.* Applicative => Monad.
* Unify pure/return. Depends on Applicative => Monad.
* Add join method to Monad, with default definitions for
* join/(>>=).
* Remove fail from Monad (add Monad => MonadFail, if desired).
* Make the (<$) method of Functor more official. When starting up
ghci-7.6.1, it only gives (<$) qualified as (GHC.Base.<$)
* Replace Enum by type classes which do not require partial
* functions. (I have a more concrete proposal for this one, which I'll put on
Hackage in the next week or so.) This isn't a hot topic like the others, but
it's part of the general concern about having partial functions as
standard/required parts of the language.
* Remove from the Prelude things which are not required for resolving circularity. This is highly controversial, but I think it would help minimize future issues. If desired, in order to reduce imports, we could have an Interlude which serves the kitchen-sink role of the current Prelude but which requires an explicit import rather than being implicit like the Prelude is.
* Remove the list-monomorphic versions of Foldable/Traversable functions. And/or export them from a separate PegagogicalHaskell module for learners to use, such that they do not materially affect intermediate/advanced Haskellers.
* This is a bit off-proposal, but: do not have every Control.Monad.* module re-export Control.Monad. Modules like Control.Monad.Foo should only export Foo-specific things; if people want the general tools they can import Control.Monad itself. This is related to the pain of standardizing on Foldable/Traversable.
* Clean up the Monoid class, add a Semigroup superclass, etc. There was a lot of discussion about this a while back. We came up with a fair solution, but it'd be nice to revisit the discussion and tighten things up while we're at it.
map
used to work on any functor. (++)
was part of MonadPlus. List comprehensions were generalized to any monad. fold
sure does help a lot: pretty much every agelbraic type can be folded and you can even mechamically derive fold for them too, but why the hell does Foldable
have fucking length
in it? List
keep length
and call the Foldable
equivalent total
or something? Because the name length
implies some sort of sequential linear structure, while a Tree
can be Foldable
too.it's not something you can abstract over with a classYou can if you restricted it to type constructors with kind
*->*
, and Foldable
does just this.class Foldable f where foldr::(a->b->b)->b->f a->b
Foldable
from being a convoluted OVER-ENGINEERED piece of shitware. Foldable
already implies some sort of sequential linear structure, whether it's a tree or not is irrelevant. If it's listable, there is length of it. data Expression = Number Int
| Add Expression Expression
| Minus Expression
| Mult Expression Expression
| Divide Expression Expression
mathematically justified things.Yeah, like Num. All of my category theory books say that numbers must have functions for negation and conversion to strings.
real foldyou mena CATAMORPHISM