Difference between revisions of "User:Lenny222/Haskell explained to the busy"

From HaskellWiki
Jump to navigation Jump to search
Line 27: Line 27:
   
 
=== What is partial application? ===
 
=== What is partial application? ===
  +
TODO
 
  +
{| class="wikitable"
  +
|-
  +
! Answer
  +
! Example
  +
|-
  +
|By passing less than the full set of arguments to a function that takes multiple arguments, one can create new functions.
  +
|<haskell>
  +
add :: Int -> Int -> Int
  +
add x y = x + y
  +
  +
addOne = add 1
  +
</haskell>
  +
|}
   
 
=== What is the "Prelude"? ===
 
=== What is the "Prelude"? ===

Revision as of 11:45, 8 October 2009

You have heard about Haskell but don't have the time to find out what it is?

This page may be for you.

Introduction

What is Haskell?

Haskell is a purely functional, lazy, statically typed programming language

What is a purely functional programming language?

What is good about that?

What is lazy evaluation?

What is good about that?

What is static typing?

What is good about that?

Is Haskell Open Source?

Why the name "Haskell"?

Haskell is named after the American mathematician Haskell Curry

Functions

How do i apply functions?

TODO

What is partial application?

Answer Example
By passing less than the full set of arguments to a function that takes multiple arguments, one can create new functions.
add :: Int -> Int -> Int
add x y = x + y

addOne = add 1

What is the "Prelude"?

The Prelude is a standard module that is available to all Haskell code by default.

What is currying?

TODO

How do i define a function?

Answer Example
TODO
add x y = x + y

Didn't you say Haskell is statically typed? It is. TODO

What is an infix operator?

Answer Example
Infix operators are normal functions.

TODO: symbols, round brackets

5 + 2

is the same as

(+) 5 2


Are there any prefix operators?

TODO: (-)

What is point-free style?

Answer Example
Point-free style is a way to define functions solely as a composition of other functions.

Function arguments do not show up in the function definition.

The point-free style version of
takeFive x = take 5 x

is

takeFive = take 5

What is a higher-order function?

TODO

What is pattern matching?

TODO

Data types

TODO

Lists

TODO

Strings

TODO

Tupels

TODO

Tuples

Defining your own types

Type classes

What is a type variable?

TODO

What is a type class?

TODO

Comments

How do i write single-line comments?

Answer Example
Everything between a double dash "--" followed by a space and the end of the line is a single-line comment.

A single-line comment will be ignored by the compiler.

-- Sort the list
sort [3,2,4]

or

sort [3,2,4] -- Sort the list

How do i write block comments?

Answer Examples
Everything between "{-" followed by a space and "-}" is a block comment.

A block comment will be ignored by the compiler.

{-
The next line would sort the list, if it wasn't in a block comment
sort [3,2,4]
-}

or

sort [3,2,4] {- Block quotes can also be used for single line comments -}

Special characters, expressions and keywords

.

Meaning Example
The dot "." is used to compose functions in point-free style, similar to "$".
foo = h . g . f

is the same as

foo x = h $ g $ f x

which is the same as

foo x = h (g (f x))

`

Meaning Example
A function enclosed in back ticks "`" can be used as an infix operator.
2 `subtract` 10

is the same as

subtract 2 10

'

Tick TODO: single characters, common usage in function names

:

Meaning Example
The colon ":" is an infix operator that adds an element to the beginning of a list.
1 : [2,3]

will result in the new list

[1,2,3]

::

The double colon TODO

|

Downslash TODO: pattern matching, data types

\

Backslash TODO: multiline strings, lambda function

$

Meaning Example
The dollar sign "$" is a way to compose functions, without typing too many brackets.
foo x = h $ g $ f x

is the same as

foo x = h (g (f x))

@

TODO: as-pattern

--

Meaning Example
The double dash "--" followed by a space begins a single-line comment.
-- A single-line comment

[ ]

The square brackets TODO

{- -}

Meaning Example
Everything between "{-" followed by a space and "-}" is a block comment.
{-
This is a block comment
-}

{-# #-}

Meaning Example
Everything between "{-#" followed by a space and "#-}" defines a compiler pragma.
{-# INCLUDE "foo.h" #-}

data

Meaning Example

"data" defines a new data type. TODO

data colors = Red | Blue | Green

deriving

TODO

forall

TODO

newtype

TODO

type

TODO