Tutorials 1 Introductions to Haskell These are the recommended places to start learning, short of buying a textbook. 1.1 Best places to start Learn You a Haskell for Great Good! (LYAH) Nicely illustrated tutorial showing Haskell concepts while interacting in GHCi. Real World Haskell (RWH) A free online version of the complete book, with numerous reader-submitted comments. Yet Another Haskell Tutorial (YAHT) By Hal Daume III et al. Haskell Wikibook A communal effort by several authors to produce the definitive Haskell textbook. Write Yourself a Scheme in 48 Hours in Haskell A Haskell Tutorial, by Jonathan Tang. How to Learn Haskell Some students at Washington University in St. О Haskell по-человечески About Haskell from a beginner for beginners. 1.2 Other tutorials Haskell for the Evil Genius By Andrew Pennebaker. Parallel Processing with Haskell By Andrew Pennebaker. GetOptFu By Andrew Pennebaker. A Gentle Introduction to Haskell By Paul Hudak, John Peterson, and Joseph H. H-99: Ninety-Nine Haskell Problems
Design and Analysis of Algorithms Information Overview This core course covers good principles of algorithm design, elementary analysis of algorithms, and fundamental data structures. The emphasis is on choosing appropriate data structures and designing correct and efficient algorithms to operate on these data structures. Learning outcomes This is a first course in data structures and algorithm design. learn good principles of algorithm design; learn how to analyse algorithms and estimate their worst-case and average-case behaviour (in easy cases); become familiar with fundamental data structures and with the manner in which these data structures can best be implemented; become accustomed to the description of algorithms in both functional and procedural styles; learn how to apply their theoretical knowledge in practice (via the practical component of the course). Synopsis Program costs: time and space. Syllabus Reading list T.
Engineering Large Projects in a Functional Language I had the opportunity to speak at DevNation on July 10th in Portland, and gave the following talk, an updated version of Galois’ collective experiences developing Haskell projects over the past decade. You can download the .pdf. Abstract Galois has been building software systems in Haskell for the past decade. This talk describes some of what we’ve learned about in-the-large, commercial Haskell programming in that time. I’ll look at when and where we use Haskell. We’ll also look at the Haskell toolchain: FFI, HPC, Cabal, compiler, libraries, build systems, etc, and being a commercial entity in a largely open source community. Like this: Like Loading...
Haskell comme un vrai! tlpl: Un tutoriel très court mais très dense pour apprendre Haskell. Merci à Oleg Taykalo vous pouvez trouver une traduction Russe ici: Partie 1 & Partie 2 ; Table of Content Je pense vraiment que tous les développeurs devraient apprendre Haskell. La plupart des langages partagent les mêmes fondamentaux : les variablesles bouclesles pointeursles structures de données, les objets et les classes Haskell est très différent. Plier son esprit à Haskell peut être difficile. Cet article sera certainement difficile à suivre. La manière conventionnelle d’apprendre Haskell est de lire deux livres. Cet article fait un résumé très dense et rapide des aspect majeurs d’Haskell. Pour les francophones ; je suis désolé. Cet article contient cinq parties : Note: Chaque fois que vous voyez un séparateur avec un nom de fichier se terminant par lhs, vous pouvez cliquer sur le nom de fichier et télécharger le fichier. 01_basic/10_Introduction/00_hello_world.lhs Introduction Install Tools: Don’t be afraid Functional
Concurrency Information Overview Computer networks, multiprocessors and parallel algorithms, though radically different, all provide examples of processes acting in parallel to achieve some goal. Learning outcomes At the end of the course the student should: understand some of the issues and difficulties involved in Concurrency be able to specify and model concuurent systems using CSP be able to reason about CSP models of systems using both algebraic laws and semantic models be able to analyse CSP models of systems using the model checker FDR Synopsis Processes and observations of processes; point synchronisation, events, alphabets. Syllabus Deterministic processes: traces, operational semantics; prefixing, choice, concurrency and communication. Reading list Course Text: A. Alternatives: A.W. Overheads: This year's slides will appear on the Course Materials page over the course of the term. Related research at the Department of Computer Science
Parallel programming in Haskell with explicit futures | GHC Mutterings Recently we released a new version of the parallel package on Hackage, version 3.1.0.0. This synchronises the API to that described in our Haskell Symposium 2010 paper, “Seq no More: Better Strategies for Parallel Haskell“. If you don’t know what strategies are, I recommend the paper: it does have plenty of introductory material, as well as explaining the new improvements we made. In this post I don’t want to focus on strategies, though. What I plan to do in this post is introduce a simpler, more explicit, but less abstract, parallelism API that is implemented in a few lines on top of primitives provided by the parallel package. Let’s start by looking at one of the nice additions in the new strategies API, the Eval monad: data Eval a = Done a instance Monad Eval where return x = Done x Done x >>= k = k x runEval :: Eval a -> a runEval (Done x) = x I’ve included the implementation too, so you can see how simple it is. do x <- m f x you are guaranteed that m happens before f is called.
Everything Your Professor Failed to Tell You About Functional Programming I've been trying to learn Haskell lately, and the hardest thing seems to be learning about monads. "Monads in Ruby" and "Monads for Functional Programming" helped me finally to break the ice, but more importantly, they gave me a glimpse behind the veil. I finally began to understand something that is trivial to people such as Philip Wadler, but something that never had been explained to me so succinctly. Monads as a Design Pattern Somewhere, somebody is going to hate me for saying this, but if I were to try to explain monads to a Java programmer unfamiliar with functional programming, I would say: "Monad is a design pattern that is useful in purely functional languages such as Haskell. Philip Wadler says, "Monads provide a convenient framework for simulating effects found in other languages, such as global state, exception handling, output, or non-determinism." The Java programmer could argue fairly, "Hey, Java has all those things, and monads aren't even mentioned in Design Patterns.
Computers in Society Information Overview Computing takes place in a social context which can affect the ways in which technology develops and in turn may be affected by those developments. In this course, we study these influences, and examine questions that must be answered by computing professionals, policy makers, and members of the public, in relation to the potential uses and abuses of computing technology. The course is illustrated by a number of case studies, and students are encouraged to draw upon a number of perspectives to address the issues raised by the case studies. The course is designed to enable participants to: Be aware of a variety of views of computing, including: historical; professional; social; political and cultural. Coursework consists of discussion questions, group presentations, and a final written exam with essay-style questions. Synopsis Coursework consists of discussion questions, student presentations, and a final written exam with essay-style questions. Overview. Lectures
The Resurgence of Parallelism | June 2010 By Peter J. Denning, Jack B. Dennis Communications of the ACM, Vol. 53 No. 6, Pages 30-32 10.1145/1743546.1743560 Comments (2) Multi-core chips are a new paradigm!" "We are entering the age of parallelism!" Back to Top Déjà Vu All Over Again Parallel computation has always been a means to satisfy our never-ending hunger for ever-faster and ever-cheaper computation.4 In the 1960s and 1970s, parallel computation was extensively researched as a means to high-performance computing. Shared Memory Multiprocessing The very first multiprocessor architecture was the Burroughs B5000, designed beginning in 1961 by a team led by Robert Barton. Those machines used shared memory multiprocessors in which a crossbar switch connected groups of four processors and memory boxes. The Burroughs systems were an important influence on research seeking efficient and reliable parallel program structures. Determinate Computation A major result of this research was the "determinacy theorem." Virtual Memory Conclusion
Computational Complexity Information Overview This course is an introduction to the theory of computational complexity and standard complexity classes. One of the most important insights to have emerged from Theoretical Computer Science is that computational problems can be classified according to how difficult they are to solve. This classification has shown that many computational problems are impossible to solve, and many more are impractical to solve in a reasonable amount of time. Learning outcomes The course is designed to enable students to: Classify decision problems into appropriate complexity classes, including P, NP, PSPACE and complexity classes based on randomised machine models and use this information effectively. Synopsis [1 lecture] Introduction. Syllabus Reading list Primary Text M Sipser. Supplementary List Arora, Barak.