Personal tools

Cookbook

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
(Graphical user interfaces)
(Added link to similar F# cookbook)
 
(22 intermediate revisions by one user not shown)
Line 1: Line 1:
[[Category:How to]]
+
== Haskell Cookbook ==
+
* [[Cookbook/Compilers and interpreters|Haskell compilers and interpreters]]
* [[Cookbook/Strings|Strings]]
 
 
* [[Cookbook/Numbers|Numbers]]
 
* [[Cookbook/Numbers|Numbers]]
  +
* [[Cookbook/Lists and strings|Lists and strings]]
  +
* [[Cookbook/Other data structures|Other data structures]]
 
* [[Cookbook/Dates And Time|Dates and time]]
 
* [[Cookbook/Dates And Time|Dates and time]]
* [[Cookbook/Lists|Lists]]
 
* [[Cookbook/Other data structures|Other data structures]]
 
 
* [[Cookbook/Pattern matching|Pattern matching]]
 
* [[Cookbook/Pattern matching|Pattern matching]]
 
* [[Cookbook/Interactivity|Interactivity]]
 
* [[Cookbook/Interactivity|Interactivity]]
Line 11: Line 11:
 
* [[Cookbook/XML|XML]]
 
* [[Cookbook/XML|XML]]
 
* [[Cookbook/Databases access|Databases access]]
 
* [[Cookbook/Databases access|Databases access]]
  +
* [[Cookbook/Graphical user interfaces|Graphical user interfaces]]
  +
* [[Cookbook/PDF files|PDF files]]
  +
* [[Cookbook/FFI|FFI]]
  +
* [[Cookbook/Testing|Testing]]
   
{{Template:Anonymousdraft}}
+
== Similar projects for other programming languages ==
+
* [http://cl-cookbook.sourceforge.net/ Common Lisp Cookbook]
'''We need to start a Haskell centered cookbook (aka, not a [http://pleac.sourceforge.net/ PLEAC] clone)
+
* [http://pleac.sourceforge.net/ PLEAC]
+
* [http://www.zenspider.com/Languages/Ruby/Cookbook/index.html Ruby Cookbook]
This page is based on the Scheme Cookbook at
+
* [http://schemecookbook.org/Cookbook/WebHome Scheme Cookbook]
http://schemecookbook.org/Cookbook/WebHome'''
+
* [http://fssnip.net/ F# Snippets]
== Prelude ==
+
[[Category:FAQ]]
+
[[Category:How to]]
A lot of functions are defined in the "[http://www.haskell.org/hoogle/?q=Prelude Prelude]". Also, if you ever want to search for a function, based on the name, type or module, take a look at the excellent [http://www.haskell.org/hoogle/ Hoogle]. This is for a lot of people a must-have while debugging and writing Haskell programs.
 
 
== GHCi/Hugs ==
 
=== GHCi interaction ===
 
To start GHCi from a command prompt, simply type `ghci'
 
 
$ ghci
 
___ ___ _
 
/ _ \ /\ /\/ __(_)
 
/ /_\// /_/ / / | | GHC Interactive, version 6.6, for Haskell 98.
 
/ /_\\/ __ / /___| | http://www.haskell.org/ghc/
 
\____/\/ /_/\____/|_| Type :? for help.
 
 
Loading package base ... linking ... done.
 
Prelude>
 
 
[http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html Prelude] is the "base" library of Haskell.
 
 
To create variables at the GHCi prompt, use `let'
 
<haskell>
 
Prelude> let x = 5
 
Prelude> x
 
5
 
Prelude> let y = 3
 
Prelude> y
 
3
 
Prelude> x + y
 
8
 
</haskell>
 
 
`let' is also the way to create simple functions at the GHCi prompt
 
<haskell>
 
Prelude> let fact n = product [1..n]
 
Prelude> fact 5
 
120
 
</haskell>
 
 
 
=== Checking Types ===
 
To check the type of an expression or function, use the command `:t'
 
<haskell>
 
Prelude> :t x
 
x :: Integer
 
Prelude> :t "Hello"
 
"Hello" :: [Char]
 
</haskell>
 
Haskell has the following types defined in the [http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html Standard Prelude].
 
<haskell>
 
Int -- bounded, word-sized integers
 
Integer -- unbounded integers
 
Double -- floating point values
 
Char -- characters
 
String -- equivalent to [Char], strings are lists of characters
 
() -- the unit type
 
Bool -- booleans
 
[a] -- lists
 
(a,b) -- tuples / product types
 
Either a b -- sum types
 
Maybe a -- optional values
 
</haskell>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
== PDF files ==
 
 
For the following recipes you need to install [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HPDF HPDF].
 
 
=== Creating an empty PDF file ===
 
 
The following code creates an empty PDF file with the name "test1.pdf":
 
 
<haskell>
 
import Graphics.PDF
 
 
main :: IO ()
 
main = do
 
let outputFileName= "test1.pdf"
 
let defaultPageSize = PDFRect 0 0 200 300
 
 
runPdf outputFileName standardDocInfo defaultPageSize $ do
 
addPage Nothing
 
</haskell>
 
 
=== Pages with different sizes ===
 
 
If you pass "Nothing" to the function [http://hackage.haskell.org/packages/archive/HPDF/latest/doc/html/Graphics-PDF-Document.html#v%3AaddPage addPage], the default page size will be used for the size of the new page.
 
 
Let’s create three pages, the last two pages with different dimensions:
 
 
<haskell>
 
import Graphics.PDF
 
 
main :: IO ()
 
main = do
 
let outputFileName= "test2.pdf"
 
let defaultPageSize = PDFRect 0 0 200 300
 
 
runPdf outputFileName standardDocInfo defaultPageSize $ do
 
addPage Nothing
 
addPage $ Just $ PDFRect 0 0 100 100
 
addPage $ Just $ PDFRect 0 0 150 150
 
</haskell>
 
 
== FFI ==
 
=== How to interface with C===
 
 
Magnus has written [http://therning.org/magnus/archives/315 a nice example ] on how to call a C function operating on a user defined type.
 
 
== Testing ==
 
 
=== QuickCheck ===
 
 
TODO
 
 
=== HUnit ===
 
 
TODO
 

Latest revision as of 18:49, 26 May 2011

[edit] 1 Haskell Cookbook

[edit] 2 Similar projects for other programming languages