[Haskell-beginners] How Haskell Fits Into an Operating System / API Environment
Heinrich Apfelmus
apfelmus at quantentunnel.de
Sun Aug 18 10:55:00 CEST 2013
Philippe Sismondi wrote:
> I am the original poster on this. [..]
>
> One of the commonest claims made about pure functional languages, and
> Haskell in particular, is that programs written in pure functional
> languages contain fewer bugs than…"other stuff". The claim seems
> largely to be about (a) avoiding mutability, and (b) type safety and
> static type checking. (I have no quibble with the typing part of the
> claim; I love this in Haskell.) In the same spirit, Haskell
> programmers are wont to assert that they are confident that a program
> that compiles is a correct program. However, these claims (as made in
> books on Haskell, and on mailing lists such as this) are no more than
> anecdotal.
Note that there is a principled argument for (a) that does not rely on
empirical evidence. It goes as follows: avoiding mutable state means
that a piece of source code, say a function definition, can be reasoned
about *without* needing to know about the possible contexts (code paths)
in which it can appear. In other words, the correctness of a pure
function can be checked by looking only at the function definition, the
rest of the program code has no bearing on it. In contrast, mutable
state usually means a "spooky action at a distance" between separate
code sections.
> At the risk of pouring fuel on the fire, I would ask: Can
> anyone point me to scientific studies quantifying the benefits of
> pure functional languages? I expect they exist, but I am interested
> not just in lack of errors, but in overall productivity. (It's easy
> to avoid program bugs: just write programs that don't do anything, or
> don't write any software at all.)
You know well that (1) such studies are hard to design for any language
and (2) nobody asks for studies that quantify the benefits of imperative
languages, simply because they happen to be the status quo.
Still, there are some interesting case studies, for instance
P Hudak and M P Jones
"Haskell vs. Ada vs. C++ vs. Awk vs. ...
An Experiment in Software Prototyping Productivity"
http://haskell.cs.yale.edu/?post_type=publication&p=366
> The value of being able to produce correct programs is, no doubt
> enormous. But that is hardly the end of the matter.
>
> My sense is that most of us who produce software are less interested
> in error-free software than in overall productivity. There is an
> enormous amount of highly useful software out there that contains all
> kinds of both known and as yet undiscovered bugs. [..]
I always dread the prospect of dealing with non-Haskell libraries,
because I often lose several days of development time investigating how
a library really behaves as opposed to how it should behave according to
the specification. I have mentioned two recent examples in a previous
email (HTML 5 drag & drop, WebSockets), but it has also happened to me
when doing development with Cocoa.
> The world outside your program is stateful, I think (I agree with
> Heraclitus on this). Any software that must deal with the "world"
> outside itself over time must deal with state. So even devotees of of
> pure FP agree that the trick is to somehow hive off or isolate state
> and IO, or maybe to mimic it with pure techniques in order to ensure
> correctness.
Note that source code is a *model* and we are free to choose any model
we like. The "true nature" of the world being "stateful" has no bearing
on this. For instance, physicists actually model the world in a
stateless fashion (a particle is modeled by a function from time to
position in space).
> But the problem of dealing with IO in Haskell is hardly a solved
> problem. Reading the history of Haskell one discovers that the use of
> monads was not the first attempt at dealing with IO in the language.
> Moreover, research papers continue to appear on other ways to handle
> state and IO in FPL. So it can hardly be said that, "well, we've got
> this problem licked, so just suck it up and learn it." It can hardly
> be questioned that people find monads tough to understand; some never
> do, and some (like me) can use them but find them a pain in the ass
> (so are arrows).
Huh? How is dealing with IO not a solved problem in Haskell?
Note that there may be smarter ways to deal with "IO" (e.g. FRP), but I
don't see how experiments with new models invalidate an existing model.
Also note that software transactional memory (STM) is a solved problem
in Haskell, something that cannot be said of any other imperative language.
Best regards,
Heinrich Apfelmus
--
http://apfelmus.nfshost.com
More information about the Beginners
mailing list