Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Save to My Library
Look up keyword
Like this
1Activity
0 of .
Results for:
No results containing your search query
P. 1
YetAnotherHaskellTutorial

YetAnotherHaskellTutorial

Ratings: (0)|Views: 32 |Likes:
Published by Paulmo

More info:

Published by: Paulmo on Apr 23, 2009
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

07/18/2010

pdf

text

original

 
Yet Another Haskell Tutorial
Hal Daum´e IIICopyright (c) Hal Daume III, 2002-2006. The preprint version of this tutorial isintended to be free to the entire Haskell community. It may be distributed underthe terms of the GNU Free Document License, as permission has been granted toincorporate it into the Wikibooks projects.
 
About This Report
The goal of the
Yet Another Haskell Tutorial
is to provide a complete introduction tothe Haskell programming language. It assumes no knowledge of the Haskell languageor familiarity with functional programming in general. However, general familiaritywith programming concepts (such as algorithms) will be helpful. This is not intendedto be an introduction to programming in general; rather, to programming in Haskell.Sufficient familiarity with your operating system and a text editor is also necessary(this report only discusses installation on configuration on Windows and *Nix system;other operating systems may be supported – consult the documentation of your chosencompiler for more information on installing on other platforms).
What is Haskell?
Haskell is called a lazy, pure functional programming language. It is called
lazy
be-cause expressions which are not needed to determine the answer to a problem are notevaluated. The opposite of lazy is
strict 
, which is the evaluation strategy of most com-mon programming languages (C, C++, Java, even ML). A strict language is one inwhich every expression is evaluated, whether the result of its computation is importantor not. (This is probably not entirely true as optimizing compilers for strict languagesoftendo what’s called“deadcodeelimination”this removesunusedexpressionsfromthe program.) It is called
pure
because it does not allow side effects (A side effect issomething that affects the “state” of the world. For instance, a function that printssomething to the screen is said to be side-effecting, as is a function which affects thevalue of a global variable.) – of course, a programming language without side effectswould be horribly useless; Haskell uses a system of 
monads
to isolate all impure com-putations fromthe rest of the programand performthem in the safe way (see Chapter 9for a discussion of monads proper or Chapter 5 for how to do input/output in a purelanguage).Haskell is called a
functional
language because the evaluation of a program isequivalent to evaluating a function in the pure mathematical sense. This also differsfrom standard languages (like C and Java) which evaluate a sequence of statements,one after the other (this is termed an
imperative
language).i
 
ii
The History of Haskell
The history of Haskell is best described using the words of the authors. The followingtext is quoted from the published version of the Haskell 98 Report:In September of 1987 a meeting was held at the conference on FunctionalProgramming Languages and Computer Architecture (FPCA ’87) in Port-land, Oregon, to discuss an unfortunate situation in the functional pro-gramming community: there had come into being more than a dozen non-strict, purely functional programming languages, all similar in expressivepower and semantic underpinnings. There was a strong consensus at thismeetingthatmorewidespreaduseofthisclass offunctionallanguageswasbeing hampered by the lack of a common language. It was decided that acommittee should be formed to design such a language, providing fastercommunication of new ideas, a stable foundation for real applications de-velopment, and a vehicle through which others would be encouraged touse functional languages. This document describes the result of that com-mittee’s efforts: a purelyfunctionalprogramminglanguagecalledHaskell,namedafterthe logicianHaskell B. Currywhose workprovidesthe logicalbasis for much of ours.The committee’s primarygoal was to design a languagethat satisfied theseconstraints:1. It should be suitable for teaching, research, and applications, includ-ing building large systems.2. It should be completely described via the publication of a formalsyntax and semantics.3. It should be freely available. Anyone should be permitted to imple-ment the language and distribute it to whomever they please.4. It should be based on ideas that enjoy a wide consensus.5. It should reduce unnecessary diversity in functional programminglanguages.The committee intended that Haskell would serve as a basis for futureresearch in language design, and hoped that extensions or variants of thelanguage would appear, incorporating experimental features.Haskell has indeed evolved continuouslysince its original publication. Bythe middle of 1997, there had been four iterations of the language design(the latest at that point being Haskell 1.4). At the 1997 Haskell Workshopin Amsterdam, it was decided that a stable variant of Haskell was needed;this stable language is the subject of this Report, and is called “Haskell98”.Haskell 98 was conceived as a relatively minor tidy-up of Haskell 1.4,making some simplifications, and removing some pitfalls for the unwary.

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->