Cookbook

From HaskellWiki
Revision as of 02:35, 22 February 2007 by Mbishop (talk | contribs)
Jump to navigation Jump to search

We need to start a GOOD (aka, not a PLEAC clone) Haskell cookbook.

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>

Prelude is the "base" library of Haskell.

To create variables at the GHCi prompt, use `let'

Prelude> let x = 5
Prelude> x
5
Prelude> let y = 3
Prelude> y
3
Prelude> x + y
8

Types

To check the type of an expression or function, use the command `:t'

Prelude> :t x
x :: Integer
Prelude> :t y
y :: Integer

Haskell has the following types defined in the Standard Prelude.

    Int         -- bounded, word-sized integers
    Integer     -- unbounded integers
    Double      -- floating point values
    Char        -- characters
    String      -- strings
    ()          -- the unit type
    Bool        -- booleans
    [a]         -- lists
    (a,b)       -- tuples / product types
    Either a b  -- sum types
    Maybe a     -- optional values

Strings

Input

Strings can be read as input using getLine.

Prelude> getLine
Foo bar baz
"Foo bar baz"

Output

Strings can be output in a number of different ways.

Prelude> putStr "Foo"
FooPrelude>

As you can see, putStr does not include the newline character `\n'. We can either use putStr like this:

Prelude> putStr "Foo\n"
Foo

Or use putStrLn, which is already in the Standard Prelude

Prelude> putStrLn "Foo"
Foo

We can also use print to print a string, including the quotation marks.

Prelude> print "Foo"
"Foo"

Concatenation

Concatenation of strings is done with the `++' operator.

Prelude> "foo" ++ "bar"
"foobar"

Numbers

Dates and Time

Use `System.Time.getClockTime' to get a properly formatted date stamp.

Prelude> System.Time.getClockTime
Wed Feb 21 20:05:35 CST 2007

Lists

Haskell has all of the general list manipulation functions.

Prelude> head [1,2,3]
1

Prelude> tail [1,2,3]
[2,3]

Prelude> length [1,2,3]
3

Pattern Matching

Haskell does implicit pattern matching.

Arrays

Files

Network Programming

XML

Databases

FFI