Difference between revisions of "Cookbook"
(fleshed out the sections a little) |
|||
Line 29: | Line 29: | ||
</haskell> |
</haskell> |
||
+ | == Types == |
||
To check the type of an expression or function, use the command `:t' |
To check the type of an expression or function, use the command `:t' |
||
<haskell> |
<haskell> |
||
Prelude> :t x |
Prelude> :t x |
||
x :: Integer |
x :: Integer |
||
+ | Prelude> :t y |
||
+ | y :: Integer |
||
+ | </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 -- strings |
||
+ | () -- the unit type |
||
+ | Bool -- booleans |
||
+ | [a] -- lists |
||
+ | (a,b) -- tuples / product types |
||
+ | Either a b -- sum types |
||
+ | Maybe a -- optional values |
||
</haskell> |
</haskell> |
||
== Strings == |
== Strings == |
||
+ | === Input === |
||
+ | Strings can be read as input using [http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v%3AgetLine getLine]. |
||
+ | <haskell> |
||
+ | Prelude> getLine |
||
+ | Foo bar baz |
||
+ | "Foo bar baz" |
||
+ | </haskell> |
||
+ | |||
=== Output === |
=== Output === |
||
Strings can be output in a number of different ways. |
Strings can be output in a number of different ways. |
||
− | |||
<haskell> |
<haskell> |
||
Prelude> putStr "Foo" |
Prelude> putStr "Foo" |
||
Line 52: | Line 76: | ||
Prelude> putStrLn "Foo" |
Prelude> putStrLn "Foo" |
||
Foo |
Foo |
||
+ | </haskell> |
||
+ | We can also use [http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v%3Aprint print] to print a string, '''including the quotation marks.''' |
||
+ | <haskell> |
||
+ | Prelude> print "Foo" |
||
+ | "Foo" |
||
</haskell> |
</haskell> |
||
Line 60: | Line 89: | ||
"foobar" |
"foobar" |
||
</haskell> |
</haskell> |
||
+ | |||
== Numbers == |
== Numbers == |
||
Revision as of 02:35, 22 February 2007
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.