Personal tools

Cookbook/Compilers and interpreters

From HaskellWiki

< Cookbook(Difference between revisions)
Jump to: navigation, search
(first step to turn this page from an arbitrary tutorial to a cookbook chapter)
(General: use a less intimidating example)
 
(28 intermediate revisions by one user not shown)
Line 1: Line 1:
 
== GHC ==
 
== GHC ==
 +
 +
{| class="wikitable"
 +
|-
 +
!  Problem
 +
!  Solution
 +
!  Examples
 +
|-
 +
|  compiling and linking an executable
 +
|  --make
 +
|<pre>ghc --make Main.hs              --> Main</pre>
 +
|-
 +
|  compiling without linking
 +
|  -c
 +
|<pre>ghc -c Foo.hs                    --> Foo.hi, Foo.o</pre>
 +
|-
 +
|  generating Assembler code
 +
|  -S
 +
|<pre>ghc -S Foo.hs                    --> Foo.hi, Foo.s</pre>
 +
|-
 +
|  generating C code
 +
|  -C
 +
|<pre>ghc -C Foo.hs                    --> Foo.hc, Foo.hi</pre>
 +
|-
 +
|  linking files into an executable
 +
|  -o
 +
|<pre>ghc -o test Foo.o Bar.o Baz.p    --> test</pre>
 +
|}
  
 
== GHCi ==
 
== GHCi ==
  
== Checking Types ==
+
=== General ===
To check the type of an expression or function, use the command `:t'
+
 
<haskell>
+
{| class="wikitable"
Prelude> :t x
+
|-
x :: Integer
+
!  Problem
 +
!  Solution
 +
!  Examples
 +
|-
 +
|  checking a definition
 +
:i
 +
|<haskell>
 +
Prelude> :i True
 +
data Bool = ... | True  -- Defined in GHC.Bool
 +
</haskell>
 +
|-
 +
|  checking a type
 +
:t
 +
|<haskell>
 
Prelude> :t "Hello"
 
Prelude> :t "Hello"
 
"Hello" :: [Char]
 
"Hello" :: [Char]
 +
 +
Prelude> :t length
 +
length :: [a] -> Int
 
</haskell>
 
</haskell>
Haskell has the following types defined in the [[Prelude]].
+
|-
<haskell>
+
|  loading a file
    Int        -- bounded, word-sized integers
+
|  :l
    Integer    -- unbounded integers
+
|<haskell>
    Double      -- floating point values
+
Prelude> :l Foo.hs
    Char        -- characters
+
[1 of 1] Compiling Foo              ( Foo.hs, interpreted )
    String      -- equivalent to [Char], strings are lists of characters
+
Ok, modules loaded: Foo.
    ()          -- the unit type
+
    Bool        -- booleans
+
    [a]         -- lists
+
    (a,b)       -- tuples / product types
+
    Either a b  -- sum types
+
    Maybe a    -- optional values
+
 
</haskell>
 
</haskell>
 +
|-
 +
|  reloading all loaded files
 +
|  :r
 +
|<haskell>
 +
Prelude> :r
 +
</haskell>
 +
|}
 +
 +
=== Debugging ===
 +
 +
{| class="wikitable"
 +
|-
 +
!  Problem
 +
!  Solution
 +
!  Examples
 +
|-
 +
|  setting a break point
 +
|  :break
 +
|<haskell>
 +
Prelude> :break 2    -- sets a break point in line 2
 +
</haskell>
 +
|}
 +
 +
== Hugs ==
 +
 +
TODO

Latest revision as of 08:33, 25 January 2010

Contents

[edit] 1 GHC

Problem Solution Examples
compiling and linking an executable --make
ghc --make Main.hs               --> Main
compiling without linking -c
ghc -c Foo.hs                    --> Foo.hi, Foo.o
generating Assembler code -S
ghc -S Foo.hs                    --> Foo.hi, Foo.s
generating C code -C
ghc -C Foo.hs                    --> Foo.hc, Foo.hi
linking files into an executable -o
ghc -o test Foo.o Bar.o Baz.p    --> test

[edit] 2 GHCi

[edit] 2.1 General

Problem Solution Examples
checking a definition  :i
Prelude> :i True
data Bool = ... | True  -- Defined in GHC.Bool
checking a type  :t
Prelude> :t "Hello"
"Hello" :: [Char]
 
Prelude> :t length
length :: [a] -> Int
loading a file  :l
Prelude> :l Foo.hs
[1 of 1] Compiling Foo              ( Foo.hs, interpreted )
Ok, modules loaded: Foo.
reloading all loaded files  :r
Prelude> :r

[edit] 2.2 Debugging

Problem Solution Examples
setting a break point  :break
Prelude> :break 2    -- sets a break point in line 2

[edit] 3 Hugs

TODO