Personal tools

Cookbook/Compilers and interpreters

From HaskellWiki

< Cookbook(Difference between revisions)
Jump to: navigation, search
m (GHC: typo)
Current revision (08:33, 25 January 2010) (edit) (undo)
(General: use a less intimidating example)
 
(6 intermediate revisions not shown.)
Line 9: Line 9:
| compiling and linking an executable
| compiling and linking an executable
| --make
| --make
-
|<haskell>ghc -- make Main.hs --> Main</haskell>
+
|<pre>ghc --make Main.hs --> Main</pre>
|-
|-
-
| compiling a file, without linking
+
| compiling without linking
| -c
| -c
-
|<haskell>ghc -c Foo.hs --> Foo.hi, Foo.o</haskell>
+
|<pre>ghc -c Foo.hs --> Foo.hi, Foo.o</pre>
|-
|-
| generating Assembler code
| generating Assembler code
| -S
| -S
-
|<haskell>ghc -S Foo.hs --> Foo.hi, Foo.s</haskell>
+
|<pre>ghc -S Foo.hs --> Foo.hi, Foo.s</pre>
|-
|-
| generating C code
| generating C code
| -C
| -C
-
|<haskell>ghc -C Foo.hs --> Foo.hc, Foo.hi</haskell>
+
|<pre>ghc -C Foo.hs --> Foo.hc, Foo.hi</pre>
|-
|-
| linking files into an executable
| linking files into an executable
| -o
| -o
-
|<haskell>ghc -o test Foo.o Bar.o Baz.p --> test</haskell>
+
|<pre>ghc -o test Foo.o Bar.o Baz.p --> test</pre>
|}
|}
== GHCi ==
== GHCi ==
 +
 +
=== General ===
{| class="wikitable"
{| class="wikitable"
Line 39: Line 41:
| :i
| :i
|<haskell>
|<haskell>
-
Prelude> :i Monad
+
Prelude> :i True
-
class Monad m where
+
data Bool = ... | True -- Defined in GHC.Bool
-
(>>=) :: m a -> (a -> m b) -> m b
+
-
(>>) :: m a -> m b -> m b
+
-
return :: a -> m a
+
-
fail :: String -> m a
+
-
-- Defined in GHC.Base
+
-
instance Monad Maybe -- Defined in Data.Maybe
+
-
instance Monad IO -- Defined in GHC.IOBase
+
-
instance Monad ((->) r) -- Defined in Control.Monad.Instances
+
-
instance Monad [] -- Defined in GHC.Base
+
</haskell>
</haskell>
|-
|-
Line 68: Line 61:
[1 of 1] Compiling Foo ( Foo.hs, interpreted )
[1 of 1] Compiling Foo ( Foo.hs, interpreted )
Ok, modules loaded: Foo.
Ok, modules loaded: Foo.
 +
</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>
</haskell>
|}
|}

Current revision

Contents

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

2 GHCi

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

2.2 Debugging

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

3 Hugs

TODO