_______________________________________________ Haskell-Cafe mailing list Haskel...@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Hi Ertugrul,> Well, it is a rant, so you can just as well concede it. =)By my standards that was a lullaby ;-)Everything you said is correct. Just like everything I said.The best policy lies between the two extremes. Your extreme would be fine if Haskell presented itself as a purely theoretical research tool. But it actually wants people to use it for stuff that peoples' livelihoods depend on.
So there are some shiny new frameworks out there which unlike WASH didn't break yet. Thanks for the pointers. I tripped over blaze a moment ago (so no I didn't stomp back to PHP after all) which mentions something called Snap. I'll check out your other suggestions too.But what about two years from now? Will they still be working by then or will their developers have got just as sick of continually moving goalposts as those of WASH evidently did? Or would I be taking on the job of maintaining it myself? I guess you'll be telling me that Happstack is a bad habit of mine and I should rewrite my whole system in whatever the new thing is by then.I mentioned this trade-off that you talk about towards the end of my rantaby. It's true that we can't have the best of both worlds but perhaps a little restraint would be appropriate. I mean, are you saying that Haskell was really bad when it could make up its mind what "import Prelude" meant? If you really want to change something that basic, how about calling the new one Prelude2? I kinda liked Haskell even in 1998. I just don't see why switching new things on has to mean switching old things off. You can't have your cake and eat it, but I see no reason to shit all over one half of the cake just because you're more interested in the other half.Also, there's no real value in blaming these problems on the maintainers for retaining the "bad habits" that they learned from Haskell. The reality is that the forums are crammed with people suffering this kind of thing. It doesn't make a difference who you blame. Either way, the ecosystem looks untrustworthy, so fewer people will adopt it, and it'll be retreating from its original stated goal, which IIRC was to be a standard and widely used FL. It might be very rigorous and clever, but that's not much use if it's only being used by the people who have a full time job making it even cleverer.
Not a lot of people in industry are using Haskell. More are using Erlang, Ocaml, XSL, J#, etc so it can't be just because they're scared of FP. If you'd rather see more using Haskell, I strongly suggest you get a grip on what real companies actually have to worry about. It ain't mathematical rigour. Backward compatibility is a big chunk of it.Adrian.
_______________________________________________
Haskell-Cafe mailing list
Haskel...@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
To express this question in a broader context: Are you leaving a broken
tool and replacing it with a new shiny one?
Let's face it: this decision to change the default syntax in GHC7 means that right now Haskell looks about as stable as Ruby on Rails.
I just tried to use Flippi. It broke because of the syntax change so I tried WASH. I couldn't even install it because of the syntax change. I persisted for a while but gave up because getPackageId doesn't exist in any form at all anymore. This was only the install script: what would WASH itself have in store for me to get my brain around?
If you are actively using something then keep it up to date, encourage someone to keep it up to date, pay someone to keep it up to date, or migrate off of it. If you try building with a fresh set of packages every so often, you can catch breaking changes early and deal with them when it's typically pretty clear why things broke.
How about the Haskell Platform? Is that ancient history? Certainly not: it doesn't compile on anything but the very newest GHC.
And unless somebody can explain to me how I would rescue my business now if I had opted for WASH
If you are actively using something then keep it up to date, encourage someone to keep it up to date, pay someone to keep it up to date, or migrate off of it. If you try building with a fresh set of packages every so often, you can catch breaking changes early and deal with them when it's typically pretty clear why things broke.
I think you're missing the point of the platform!
I think you're missing the point of the platform!I suppose I did miss the point of the platform: I was trying to build it, which requires at least part of the
platform. As I say, the reason I was trying to build it was that I wrongly blamed the ubuntu package for
Yes there are times when something has to change. I acknowledged that in my original post. But I see no evidence whatsoever that anybody in control of Haskell is holding fire even on things as innocent as getPackageId or as ubiquitous as the prelude. I'm not asking for the opposite extreme of conservatism, just a bit of common sense instead of this bloodbath.
I suppose I did miss the point of the platform: I was trying to build it, which requires at least part of the platform.
just a bit of common sense instead of this bloodbath.
What's getPackageId? It does not appear in the WASH source.
Which source of WashNGo are you using? It doesn't appear in either of these
versions:
http://hackage.haskell.org/package/WashNGo-2.12
http://hackage.haskell.org/package/WashNGo-2.12.0.1
So WASH is ancient history. OK, lets forget it.How about the Haskell Platform? Is that ancient history? Certainly not: it doesn't compile on anything but the very newest GHC. Not 7.4.1 but 7.4.2.
Now that's rapid maintenance, but it's still version hell because you've got to have that compiler installed first (even though HP is supposed to be a way to acquire haskell) and you probably haven't. You've probably got the one from the linux package which hasn't been maintained since, ooh, must have been at least a week ago, so you install the new one and you've trashed cabal. How long is that puzzle gonna take to unravel?
Download the source tarball for Unix-like systems: here
7976508c50305969f64c721a1d095ae22efff8b7Get and install GHC 7.4.2 prior to building the platform:
Finally, unpack the Haskell Platform source tarball, and run (possibly with 'sudo'):
./configuremakemake install
Now that's rapid maintenance, but it's still version hell because you've got to have that compiler installed first (even though HP is supposed to be a way to acquire haskell) and you probably haven't. You've probably got the one from the linux package which hasn't been maintained since, ooh, must have been at least a week ago, so you install the new one and you've trashed cabal. How long is that puzzle gonna take to unravel?About 12 seconds, if you read http://www.haskell.org/platform/linux.html:Download the source tarball for Unix-like systems: here
haskell-platform-2012.4.0.0.tar.gz
- SHA-1:
7976508c50305969f64c721a1d095ae22efff8b7Get and install GHC 7.4.2 prior to building the platform:
Finally, unpack the Haskell Platform source tarball, and run (possibly with 'sudo'):
./configuremakemake install
Also, the Haskell Platform ./configure step checks which version of GHC you have installed, and requires you to pass the option --enable-unsupported-ghc-version in order to compile it with anything other than GHC 7.4.2.Did you try an unsupported version? And now you're complaining?
Also, the Haskell Platform ./configure step checks which version of GHC you have installed, and requires you to pass the option --enable-unsupported-ghc-version in order to compile it with anything other than GHC 7.4.2.Did you try an unsupported version? And now you're complaining?This is getting into minutia now, but yes I tried the unsupported flag and as I already explained it barfed about the prelude.
So I installed 7.4.2 from source but that confused cabal because my attempt to uninstall the ubuntu package with 7.4.1 in had failed with dependency-hell. Figuring out why (or even that) my packages weren't being seen was the puzzle I was referring to.
The point is that we wouldn't have to be talking about this at all if people didn't move the furniture around all the time.
Yes, I try it out sometimes. And if it works, great. If not, too bad, I'll wait until the next Haskell Platform. I don't whine about it in public.
So I installed 7.4.2 from source but that confused cabal because my attempt to uninstall the ubuntu package with 7.4.1 in had failed with dependency-hell. Figuring out why (or even that) my packages weren't being seen was the puzzle I was referring to.So the complaint is about Ubuntu?
The point is that we wouldn't have to be talking about this at all if people didn't move the furniture around all the time.That's not a very good point. It sounds as though you're the one who moved furniture around, considering that you managed to mix up Ubuntu's GHC package with your hand-built ones.
May I venture a guess that you never tried to manage a 5-10 million line project?
That's what I do. I'm not a programmer, I'm a manager. I run teams of a few dozen people on subprojects within huge telecom-related projects, and my job is to try and keep it all from collapsing in a heap of bugs.If you had any experience of that you'd run a mile from any technology with this hit and miss attitude.
I can't tell people what version they should be using because half of them work for a completely different company. They have their own dependencies coming from other projects that I'm not even allowed to know about.
One of the great things about the Haskell mailing lists is the supportive, respectful tone that is the dominant mode of discourse. I sense that things are getting a little out of control in this particular thread. Even though this particular issue is clearly extremely frustrating for those involved, it would be great to turn down the emotional temperature.
I don’t know why Haskell folk tend to be so generous and helpful, but they really are. (Maybe it’s the hylomorphisms.) Anyway, let’s keep it that way.
Simon
you've let a 5-10 million line project spiral out of control without putting the necessary software engineering infrastructure and controls in place ... This issue you're having reflects a lot more strongly on your technical culture than it does on any instability in GHC.
Listen: someone within your organization decided to build a product based on a very old library which is no longer maintained by anyone. If this library were actually critical to your business, you would fork it and either get someone in-house or pay a contractor to fix bugs and keep it up to date. (And there are plenty of people here who might be interested in a contract gig to fix this for you if you asked).
Repeatedly claiming in the most histrionic terms that GHC ought to freeze forever and never deprecate anything again
newsflash: it's a research platform),
and is not going to garner you any sympathy on this list, either. You could practically be the poster boy for why we have the motto "avoid success at all costs".
You have two options: stay on GHC 6.x (the bits didn't get deleted from the internet), and if that isn't practical, fix Wash (or pay someone to do it if you don't know how) and get on with your life.
One of the great things about the Haskell mailing lists is the supportive, respectful tone that is the dominant mode of discourse. I sense that things are getting a little out of control in this particular thread. Even though this particular issue is clearly extremely frustrating for those involved, it would be great to turn down the emotional temperature.
I don’t know why Haskell folk tend to be so generous and helpful, but they really are. (Maybe it’s the hylomorphisms.) Anyway, let’s keep it that way.
Simon
From: haskell-ca...@haskell.org [mailto:haskell-ca...@haskell.org] On Behalf Of Gregory Collins
Sent: 03 May 2013 08:27
To: Adrian May
Cc: Haskell Cafe
Subject: Re: [Haskell-cafe] Backward compatibility
On Fri, May 3, 2013 at 6:48 AM, Adrian May <adrian.ale...@gmail.com> wrote:
May I venture a guess that you never tried to manage a 5-10 million line project?
I build a project a couple orders of magnitude bigger than that dozens of times every day. Similar stories are not uncommon among people who inhabit this list. But thanks, citing that figure as an excuse to be condescending to that person was really worth a giggle this morning. :)
That's what I do. I'm not a programmer, I'm a manager. I run teams of a few dozen people on subprojects within huge telecom-related projects, and my job is to try and keep it all from collapsing in a heap of bugs.
If you had any experience of that you'd run a mile from any technology with this hit and miss attitude.
You keep saying things like this. Actually, you're in this situation because one or more people within your organization have made a succession of very bad choices. Haskell is not to blame. Personally, I almost can't believe you're taking this tack on the list now that the details of your situation are apparent: you've let a 5-10 million line project spiral out of control without putting the necessary software engineering infrastructure and controls in place.
I can't tell people what version they should be using because half of them work for a completely different company. They have their own dependencies coming from other projects that I'm not even allowed to know about.
... and the truth emerges. This issue you're having reflects a lot more strongly on your technical culture than it does on any instability in GHC.
Listen: someone within your organization decided to build a product based on a very old library which is no longer maintained by anyone. If this library were actually critical to your business, you would fork it and either get someone in-house or pay a contractor to fix bugs and keep it up to date. (And there are plenty of people here who might be interested in a contract gig to fix this for you if you asked).
Repeatedly claiming in the most histrionic terms that GHC ought to freeze forever and never deprecate anything again so that you can avoid doing your job properly is simply not realistic, especially given Haskell's social culture (newsflash: it's a research platform), and is not going to garner you any sympathy on this list, either. You could practically be the poster boy for why we have the motto "avoid success at all costs".
You have two options: stay on GHC 6.x (the bits didn't get deleted from the internet), and if that isn't practical, fix Wash (or pay someone to do it if you don't know how) and get on with your life.
G
--
Gregory Collins <gr...@gregorycollins.net>
Changes already made in the base library or in one of the platform
libraries:
PS The proposal to fix Functor => Applicative => Monad has patches attached for GHC and base, but the backwards compatibility bogeyman always seems to trump something that will break a lot of code.
I'll just pick a random example: Eq and Show are no longer superclassesAdrian May <adrian.ale...@gmail.com> wrote:
> > Changes already made in the base library or in one of the platform
> > libraries:
>
> So could you pick the most unassailable and tell me more about it
> please?
of Num. I'm the author of the Netwire library, a library for functional
reactive programming. Before that change you would write the following
code to express a clock that runs twice as fast as the real time clock
and oscillates up and down while gradually increasing:
liftA2 (\t o -> 2*t + sin o) time (integral_ 0 . v)
Thanks to the change you can now write it as:
2*time + sin (integral_ 0 . v)
On 3 May 2013 18:56, Ertugrul Söylemez <e...@ertes.de> wrote:
I'll just pick a random example: Eq and Show are no longer superclassesAdrian May <adrian.ale...@gmail.com> wrote:
> > Changes already made in the base library or in one of the platform
> > libraries:
>
> So could you pick the most unassailable and tell me more about it
> please?
of Num. I'm the author of the Netwire library, a library for functional
reactive programming. Before that change you would write the following
code to express a clock that runs twice as fast as the real time clock
and oscillates up and down while gradually increasing:
liftA2 (\t o -> 2*t + sin o) time (integral_ 0 . v)
Thanks to the change you can now write it as:
2*time + sin (integral_ 0 . v)
I never doubted that people add new stuff for valid reasons. What I'm interested in is whether or not it could have been done without breaking anything. But having thought about it for a while, I'm tending to think that version controlling all the standard modules is the only general solution.
You'd have them all in a git ... ahem ... darcs repo which every dev would clone the entire history of. Something prominent in the project would say which version you want. (We could brainstorm about hierarchies of that but it probably wouldn't work anyway.) GHC would just switch its internals according to that number and fetch the right version of the module out of darcs as part of the compilation process.If you really wanted to protect people from future changes, you'd make it obligatory to tell ghc which version you want, but seeing as I seem to be more worried about this than anybody else around here, I might as well assume you'd default to the latest, but please, at least issue a warning so that people know this offbeat system even exists.
)I could have my project source in a completely different source control system cos this darcs interaction is internal to the compiler.This ain't gonna mean I don't have to maintain stuff, but having the choice about when to do so would be a great help.
How about this: can you guys give me a detailed example of a justified deprecation: one so extremely obviously called for that even I would agree. I just want to understand the kind of logic that's applied over these things.
Barring issues with changing datatypes / class instances, we can already express many of the API changes you'd want to make to some library [1]. Now, no one actually does what this proposal suggests - it's a lot of work, and it doesn't work in general. However, the fact that Haskell makes something like this seem reasonable is heartening.
> PS The proposal to fix Functor => Applicative => Monad has patchesThis kind of "breaks everything" changes would require something similar
> attached for GHC and base, but the backwards compatibility bogeyman
> always seems to trump something that will break a lot of code.
to what Python is doing with the 2 -> 3 transition, and considering how
painfully slowly it is progressing there, I understand perfectly well why
people don't want to go there.
I'm surprised that the various superclass proposals haven't got more attention, seeing as it would allow for this kind of class hierarchy clean-up without breaking lots of code.
Is anybody in the Haskell community still interested in attracting new users? If so I suggest you go play with Ruby on Rails. Then you'll know what it's like to approach a complex and unfamiliar system where every crumb requires a precise version of every other. If you had my job, you'd find out what you needed to know within half an hour.
It seems fair to say that Haskell's designers lean more to evolution
than maintaining backward compatibility. This reminds me of "Go" (the
programming language). The approach chosen by Go's designers was to
create a tool (gofix) that would automatically fix one's code to
comply with the latest standard. See
[http://talks.golang.org/2012/splash.article#TOC_17.] (yes, include
that last period).
Given the apparent simplicity of the changes needed to keep one's
Haskell code up to snuff and the strong typing inherent in Haskell
code, would it not be possible to create something similar? If there
is a tool that moves (most of) one's code from Haskell version n to
n+1 then making breaking changes would be even less of an issue.
Just an idea, I have no clue about its feasibility...
I mentioned the same on #haskell today. Something like Coccinelle
(http://coccinelle.lip6.fr) "semantic patches" could be really useful to
automate (some) API & language changes. Somewhat like (but better than)
the Python '2to3' tool.
I think some message about a GSoC project regarding an AST-based
refactoring tool was posted to this list. That might be a useful
building block for such tool?
Imagine one day whenever a new HP release is made, GitHub pull-requests
are created automatically based on a automatically-generated patch
verified through a compilation&test-cycle on TravisCI for GH-hosted
packages published on Hackage.
Nicolas
If it's your decision, you shouldn't be afraid to make it. You are themanager of your team! Don't let yourself be stabbed by another manager.
Recognize that your choice can lead to higher productivity
My point was to show that what you understand as "backward
compatibility" here is totally delivered by Haskell and its environment,
and how easy it is to be "conservative" (where "keeping it running" as
it is is only a matter of renaming a few imports).
> it seems important to fix that stuff
It is not.
I did not "fix" Flippi nor WASH; it is the same unmaintained code that
you should not use. If there's a security hole or it just doesn't work,
nobody will fix it, nobody will even mention it or care, because it is
clear that this is code from the past.
> it's a liability to Haskell to have broken
> code kicking around where people might find it.
There really is no reason to delete open-source code.
> and there's nothing on the WASH page to warn anybody.
The fact that it doesn't build and that the last change is from 2007 the
*is* the warning that it is completely unmaintained and not the way to
do things today.
(One could even say that by making it build on 7.6, I have removed this
warning and given the illusion that everything is fine.)
Of course I agree that it would be better if there were warnings on
their web sites that said "sorry guys, this project is dead now".
I would even be happy with newhackage sending every package maintainer a
quarterly question "Would you still call your project X 'maintained'?"
for each package they maintain; Hackage could really give us better
indications concerning this.
Still I'd say that in this case, the fact that it did not build, hasn't
had a single change in the last half decade, and that you cannot find
any recent discussion about it anywhere on the Internet, make it pretty
clear what is going on here, even for non-technical people.
> Please don't say that it's my culture's fault.
From your story it sounds like you have a problem with developer
simplemindedness and management wars idiocy.
I believe you that that's how it goes in many large organizations.
Nobody is forcing you to be part of that.
There are a lot of places that would care about you trying to get
software development right (it sounds like you do) and, surprise, the
chances that they use something like Haskell are much higher. Not
because they like research platforms, but because it's one of the
reasons for their success.
On 04/05/13 16:06, Adrian May wrote:
> Even though I've been advised against WASH already, it seems important
> to fix that stuff because it's a liability to Haskell to have broken
> code kicking around where people might find it. I found flippi just by
> googling for "haskell wiki engine", in fact I think I was pointed there
> by wikipedia, and there's nothing on the WASH page to warn anybody. So
> it's great that Niklas fixed it, thereby preventing impressionable
> people from having a Rails-day like I did.
>
> But is it correct to extrapolate from the fact that people like you can
> fix it in 5 and 75 minutes, that everybody else can and that's how
> industry should calculate its maintenance costs? You guys all know a
> hell of a lot more about Haskell than I do, but I've been playing with
> it for a few years now, and I never met anybody independently of Haskell
> who had even heard of it.
>
> On 3 May 2013 16:44, Ertugrul Söylemez <e...@ertes.de
> On 4 May 2013 02:33, Niklas Hambüchen <ma...@nh2.me <mailto:ma...@nh2.me>>
> wrote:
>
> All right, here you go: https://github.com/nh2/WashNGo
>
> https://github.com/nh2/WashNGo/commit/08010e7404219470a827f3e4172004f9d2aedc29
>
> Took me around 75 minutes.
>
> Think about it a bit:
>
> I just ported thirty thousand lines of code that I have never seen
> before and that has bit-rotted for over six years to the latest
> programming environment.
>
> It being Haskell, I am pretty confident it does *exactly* what it's
> supposed to do.
>
> I want to see anyone do that with an equivalently sized + outdated Ruby
> / Python project.
>
>
> On 02/05/13 13:27, Adrian May wrote:
> > I just tried to use Flippi. It broke because of the syntax change so I
> > tried WASH. I couldn't even install it because of the syntax change. I
> > persisted for a while but gave up because getPackageId doesn't
> exist in
> > any form at all anymore. This was only the install script: what would
> > WASH itself have in store for me to get my brain around?
>
>
_______________________________________________
What pray tell are those missing pieces? Aren't they mostly building a browser based ide plus doing training courses ?
You might want to check out FPComplete, if you haven't already. They're far more focused on making it easy for organizations to adopt Haskell than the community can be. As they say: "Where the open-source process is not sufficient to meet commercial adoption needs, we provide the missing pieces."
The fact that it doesn't build and that the last change is from 2007 the
*is* the warning that it is completely unmaintained and not the way to
do things today.
(One could even say that by making it build on 7.6, I have removed this
warning and given the illusion that everything is fine.)
Of course I agree that it would be better if there were warnings on
their web sites that said "sorry guys, this project is dead now".
I would even be happy with newhackage sending every package maintainer a
quarterly question "Would you still call your project X 'maintained'?"
for each package they maintain; Hackage could really give us better
indications concerning this.
Still I'd say that in this case, the fact that it did not build, hasn't
had a single change in the last half decade, and that you cannot find
any recent discussion about it anywhere on the Internet, make it pretty
clear what is going on here, even for non-technical people.
> Please don't say that it's my culture's fault.From your story it sounds like you have a problem with developer
simplemindedness and management wars idiocy. Nobody is forcing
you to be part of that. There are a lot of places ...
I ran into this kind of trouble when I was starting to learn Haskell. Ihad error messages like that :
test.hs:1:8:
Could not find module `List'
It is a member of the hidden package `haskell98-2.0.0.2'.
Use -v to see a list of the files searched for.
I then proceeded to figure how to include this haskell98 package, and
later ran into other problems. Perhaps this message could be hard coded
to tell the user that this is deprecated code, and he should use
Data.List instead.
_______________________________________________
Forgive me if I'm wrong, but I feel like I've seen such "suggestions" in GHC errors before.
If so, does that mean there's some sort of mechanism in the compiler already in place for such error recognition? Like some simple pattern stuff? If not, I think that it might not be bad to consider this stuff (misused packaged, changed semantics that create compiler errors), and to put something into place for future modifications. This could make it a lot easier to deal with unmaintained code.
_______________________________________________
Haskell-Cafe mailing list
Haskel...@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
Just to be clear, is WASH beyond redemption, or would it be worth reviving again? If so, why?
Cheers,
Darren