background preloader

Functional Programming

Facebook Twitter

HEAT: The Haskell Educational Advancement Tool - School of Computing - University of Kent. Using a separate editor and interpreter provides many distracting obstacles for inexperienced students learning a programming language. Professional interactive development environments, however, confuse and distract with their excessive features. Hence Heat was designed for novice students learning the functional programming language Haskell.

Based on teaching experience, Heat provides a small number of supporting features, especially for testing, and is easy to use. Heat is portable, small and works on top of the Haskell interpreter GHCi. Heat has been used in teaching functional programming at the University of Kent since 2006. Requirements met by Heat Features Download Version 5.05 Heat505.jar [1] [29 April 2013]. Documentation Installation and basic use instructions [2] Development History Version 5.05: Bug fixes and improvements related to the console and the editor. If you have questions about Heat, please contact Olaf Chitil [10]. Learn You a Haskell for Great Good!

Purely Functional Configuration Management with Nix and NixOS. Configuration management is the foundation that makes modern infrastructure possible. Tools that enable configuration management are required in the toolbox of any operations team, and many development teams as well. Although all the tools aim to solve the same basic set of problems, they adhere to different visions and exhibit different characteristics. The issue is how to choose the tool that best fits each organization's scenarios. This InfoQ article is part of a series that aims to introduce some of the configuration tools on the market, the principles behind each one and what makes them stand out from each other. You can subscribe to notifications about new articles in the series here.

In this article, I’ll give a short introduction to NixOS, a Linux distribution, and to Nix, the package manager on which NixOS is based. The problem As any system administrator knows, managing the configuration of a system is fraught with peril. Your production server dies. A quick tour of Nix NixOS. Books. Books covering many aspects of Haskell. 1 Language and library definition Simon Peyton Jones: "Haskell 98 language and libraries: the Revised Report", Cambridge University Press, 2003, Hardback, 272 pages, ISBN 0521826144, £45.00 Book Description Haskell is the world's leading lazy functional programming language, widely used for teaching, research, and applications.

The language continues to develop rapidly, but in 1998 the community decided to capture a stable snapshot of the language: Haskell 98. All Haskell compilers support Haskell 98, so practitioners and educators alike have a stable base for their work. The entire language definition is also available online: Language and library specification. 2 Textbooks Alejandro Serrano Mena: Beginning Haskell, Paperback / eBook: 498 pages, Apress (January 2014), English, ISBN: 978-1-43026-250-3 Miran Lipovača: Learn You a Haskell for Great Good! Book Description It's all in the name: Learn You a Haskell for Great Good!

See Real World Haskell. Arrows: A General Interface to Computation. Arrows are a new abstract view of computation, defined by John Hughes [Hug00]. They serve much the same purpose as monads -- providing a common structure for libraries -- but are more general. In particular they allow notions of computation that may be partially static (independent of the input) or may take multiple inputs. If your application works fine with monads, you might as well stick with them. But if you're using a structure that's very like a monad, but isn't one, maybe it's an arrow. The Arrow class A computation takes inputs of some type and produces outputs of another type. (Thanks to Cale Gibbard for the improved artwork.)

Hence Hughes defined a Haskell class of binary type constructors: class Arrow a where arr :: (b -> c) -> a b c -- Each function may be treated as a computation. (>>>) :: a b c -> a c d -> a b d -- Computations may be composed, by connecting the output of the first to the input of the second. first :: a b c -> a (b,d) (c,d) with a number of axioms. Examples b -> c. Functional programming - Getting started with Haskell. Yet Another Monad Tutorial in 15 Minutes - Carpe diem (Felix's blog) Functional programming has become popular these days, but unlike object-oriented languages, each FP language is so different from the other. Some of these use strict evaluation while others use lazily evaluated models; tons of new concurrent models were introduced; further more, states are handled differently too. Haskell, for example, does not have states, but uses its powerful type system to construct the stateful program flow normally used in other languages.

As you might guess, Monad is one of the type that does the trick. Defining a Monad type is pretty much like defining a class in an object oriented language. By learning Monad, You’ll know a different perspective of how to program, and rethink the composition of data logic beyond the object-oriented programming kingdom. What is a type Before we jump into Monad itself, let’s quickly go through the type systems. For example, an int is treated as int only when you use addl CPU instruction to present + operation on a 64 bit machine. Wadler: Monads. Philip Wadler The arrow calculus Sam Lindley, Philip Wadler, and Jeremy Yalloop, Journal of Functional Programming 20(1):51&em;69, 2010. We introduce the arrow calculus, a metalanguage for manipulating Hughes’s arrows with close relations both to Moggi’s metalanguage for monads and to Paterson’s arrow notation. Arrows are classically defined by extending lambda calculus with three constructs satisfying nine (somewhat idiosyncratic) laws; in contrast, the arrow calculus adds four constructs satisfying five laws (which fit two well-known patterns).

The five laws were previously known to be sound; we show that they are also complete, and hence that the five laws may replace the nine. Available in: pdf, doi. Monadic constraint programming Tom Schrijvers, Peter Stuckey, and Philip Wadler Journal of Functional Programming 19(6):663&em;697, 2009. A constraint programming system combines two essential components: a constraint solver and a search engine. Available in: pdf, doi.

Available in: pdf. You Could Have Invented Monads! (And Maybe You Already Have.) If you hadn't guessed, this is about monads as they appear in pure functional programming languages like Haskell. They are closely related to the monads of category theory, but are not exactly the same because Haskell doesn't enforce the identities satisfied by categorical monads. Writing introductions to monads seems to have developed into an industry. There's a gentle Introduction, a Haskell Programmer's introduction with the advice "Don't Panic", an introduction for the "Working Haskell Programmer" and countless others that introduce monads as everything from a type of functor to a type of space suit.

But all of these introduce monads as something esoteric in need of explanation. But what I want to argue is that they aren't esoteric at all. In fact, faced with various problems in functional programming you would have been led, inexorably, to certain solutions, all of which are examples of monads. Many of the problems that monads try to solve are related to the issue of side effects. Monads for the Curious Programmer, Part 1. The Monad is like a bellows: it is empty yet infinitely capable. The more you use it, the more it produces; the more you talk about it, the less you understand. –Monad Te Ching I don’t know if I’m exaggerating but it seems like every programmer who gets monads posts a tutorial about them.

(And each post begins with: There’s already a lot of monad tutorials on the Internet, but…) The reason is that getting monads it’s like a spiritual experience that you want to share with others. When facing a monad, people often behave like the three blind men describing an elephant. Monads are hard to describe because they don’t correspond to anything in our everyday experience. But first, let me answer the pertinent question: Monads enable pure functional programmers to implement mutation, state, I/O, and a plethora of other things that are not functions. The thing is, all those non-functional things that we are so used to do in imperative programming are also sources of a lot of troubles. Categories. Haskell News. Starting with Haskell. Channel 9: Videos about the people building Microsoft Products & Services. Learn You a Haskell for Great Good! Real World Haskell.

C9 Lectures: Dr. Erik Meijer. C9 Lectures: Erik Meijer - Functional Programming Fundamentals. Brian Beckman | Tags. Brian Beckman: Don't fear the Monad. Brian Beckman: The Zen of Stateless State - The State Monad.