ocaml walkthrough

Post on 18-Dec-2014

2.354 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

a quick overview of what ocaml has to offer

TRANSCRIPT

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

OCaml walkthrough

Romain Slootmaekers

June 24, 2011

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

Table of Contents I

1 What is ocaml?

2 basic programmingfunctionstypespolymorphismhigher order functionsimperative featureslabels/variants

3 modules/signatures/functorsmodules and signaturesfirst class modulesfunctors

4 object orientationRomain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

Table of Contents II

What is there?ad hoc objectsbasic OOparametrizationad hoc interfaces

5 tools

6 things to read

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

What is OCaml?

ML variantother ML variants:SML, F#, Moscow ML, Mythryl, . . .OCaml variants:MetaOCaml, JoCaml, OCamljs, . . .

compiled/interpretedbyte-code interpreter ←→ native code (speed ≈ * 7)

type inference

# l e t x = 5 ; ;v a l x : i n t = 5

strict typing

# [ 3 ; ”XX” ] ; ;E r r o r : Th i s e x p r e s s i o n has type s t r i n g butan e x p r e s s i o n was expec t ed o f type i n t

Gc,OO,simple FFI, . . .

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

functionstypespolymorphismhigher order functionsimperative featureslabels/variants

Trivial Examples(1)

l e t squa r e x = x ∗ x

l e t rec f a c n =i f n = 0then 1e l s e n ∗ f a c (n−1)

l e t rec f a c2 = f unct ion| 0 −> 1| n −> n ∗ f a c (n−1)

$ ocamlc -i trivial.ml

val square : int -> int

val fac : int -> int

val fac2 : int -> int

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

functionstypespolymorphismhigher order functionsimperative featureslabels/variants

Trivial Examples(2)

l e t avg x y = ( x+.y ) / . 2 .

l e t ( ∗∗∗ ) = avg

$ ocamlc -i trivial2.ml

val avg : float -> float -> float

val ( *** ) : float -> float -> float

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

functionstypespolymorphismhigher order functionsimperative featureslabels/variants

builtins

l e t l 0 = 1 : : 2 : : [ ] ; ;l e t l 1 = l 0 @ [ 3 ; 4 ] ; ;l e t l 2 = [ ( 1 , 1 ) ; ( 2 , 3 ) ] ; ;l e t s0 = "A string" ; ;s0 . [ 0 ] <− ’ a ’ ; ;l e t i = 4 2 ; ;l e t i 3 2 = 42 l ; ;l e t i 6 4 = 42L ; ;l e t a0 = [ | 1 . 1 ; 2 . 2 | ] ; ;a0 . ( 0 ) <− 0 . 0 ; ;s0 ; ;

$ ocamlc -i simple data.ml

val l0 : int list

val l1 : int list

val l2 : (int * int) list

val s0 : string

val i : int

val i32 : int32

val i64 : int64

val a0 : float array

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

functionstypespolymorphismhigher order functionsimperative featureslabels/variants

build your own

type f l i s t =| Empty| F l i s t of ( f l o a t ∗ f l i s t )

l e t ( ˆ . ) a b = F l i s t ( a , b )

l e t rec s i z e = f unct ion| Empty −> 0| F l i s t ( , s ) −> 1 + s i z e s

l e t ( ) =l e t f l = 3 .0 ˆ . 2 . 0 ˆ . 1 . 0 ˆ . Empty i nl e t s = s i z e f l i nP r i n t f . p r i n t f "the size is %i\n" s ; ;

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

functionstypespolymorphismhigher order functionsimperative featureslabels/variants

records

type s u i t = | Hear t s | Diamonds | Clubs | Spadestype rank = L of i n t | J | Q |K | Atype ca rd = { s u i t : s u i t ;

rank : rank }type hand = card a r r a y

l e t make card s r = { s u i t = s ; rank = r }

l e t my hand = [ | make card Hea r t s (L 2 ) ;make card Diamonds (L 3 ) ;make card Clubs (L 4 ) ;make card Spades (L 5 ) ;

| ]

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

functionstypespolymorphismhigher order functionsimperative featureslabels/variants

polymorphic functions

l e t rec s i z e = f unct ion| [ ] −> 0| : : r e s t −> 1 + s i z e r e s t

l e t ( ) =P r i n t f . p r i n t f "s1 = %i\n;s2 = %i\n"

( s i z e [ 1 ; 2 ; 3 ] )( s i z e [ ’ c ’ ; ’ h ’ ; ’ a ’ ; ’ r ’ ] ) ; ;

$ ocamlc -i pfunc.ml

val size : ’a list -> int = <fun>

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

functionstypespolymorphismhigher order functionsimperative featureslabels/variants

polymorphic functions(2)

l e t rec q s o r t = f unct ion| [ ] −> [ ]| p : : r e s t −>

l e t i s l e s s x = x < p i nl e t l , r = L i s t . p a r t i t i o n i s l e s s r e s t i nq s o r t l @ [ p ] @ q s o r t r

$ ocamlc -i pfunc2.ml

val qsort : ’a list -> ’a list = <fun>

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

functionstypespolymorphismhigher order functionsimperative featureslabels/variants

polymorphic types

type ’ a b t r e e = | Empty | Node of ’ a ∗ ’ a b t r e e ∗ ’ a b t r e e

l e t rec i n s e r t a = f unct ion| Empty −> Node ( a , Empty , Empty )| Node ( e , l , r ) as n when a = e −> n| Node ( e , l , r ) when a < e −> Node ( e , i n s e r t a l , r )| Node ( e , l , r ) −> Node ( e , l , i n s e r t a r )

l e t rec f r o m l i s t t r e e = f unct ion| [ ] −> t r e e| e : : e s −> f r o m l i s t ( i n s e r t e t r e e ) e s

l e t c t r e e = f r o m l i s t Empty [ ’ a ’ ; ’ l ’ ; ’ u ’ ; ’m’ ; ’ i ’ ; ’ n ’ ; ’ u ’ ; ’m ’ ] ; ;l e t i t r e e = f r o m l i s t Empty [ 3 ; 4 ; 5 ; 1 2 ; 5 ; 6 ; 1 ; 3 ] ; ;

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

functionstypespolymorphismhigher order functionsimperative featureslabels/variants

higher order functions

l e t rec f o l d l e f t f acc = f unct ion| [ ] −> acc| x : : x s −> f o l d l e f t f ( f acc x ) xs

l e t =P r i n t f . p r i n t f "sum=%i\n"

( f o l d l e f t (+) 0 [ 1 ; 2 ; 3 ; 4 ; 5 ] ) ; ;

$ ocamlc -i ho.ml

val fold_left : (’a -> ’b -> ’a)

-> ’a -> ’b list -> ’a = <fun>

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

functionstypespolymorphismhigher order functionsimperative featureslabels/variants

currying

open L i s t

l e t sum = f o l d l e f t (+) 0l e t prod = f o l d l e f t ( ∗ ) 1

l e t l e n xs = f o l d l e f t( fun a −> a+1) 0 xs

l e t oops = f o l d l e f t( fun a −> a+1) 0

$ ocamlc -i curry.ml

val sum : int list -> int

val prod : int list -> int

val len : ’a list -> int

val oops : ’_a list -> int

The type of this expression,

’_a list -> int,

contains type variables

that cannot be generalized

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

functionstypespolymorphismhigher order functionsimperative featureslabels/variants

for/while/references

l e t ( ) =f o r i = 0 to 5 do

P r i n t f . p r i n t f "i=%i " idone ;p r i n t n e w l i n e ( ) ;l e t j = r e f 0 i nwh i le ! j <= 5 do

P r i n t f . p r i n t f "j=%i " ! j ;i n c r j

done ;p r i n t n e w l i n e ( ) ; ;

$ ocaml for.ml

i=0 i=1 i=2 i=3 i=4 i=5

j=0 j=1 j=2 j=3 j=4 j=5

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

functionstypespolymorphismhigher order functionsimperative featureslabels/variants

labels

type po i n t = {x : f l o a t ; y : f l o a t ; z : f l o a t }l e t make po int ˜x ˜y ˜z = {x ; y ; z}l e t p2s p = P r i n t f . s p r i n t f

"{x=%.2f;y=%.2f;z=%.2f}"

p . x p . y p . z

l e t ( ) =l e t a , b , c = 1 . 0 , 2 . 0 , 3 . 0 i nl e t p0 = make po int

˜x : a ˜y : b ˜z : ci nl e t x , y , z = 4 . 0 , 5 . 0 , 6 . 0 i nl e t p1 = make po int

˜x ˜y ˜zi nP r i n t f . p r i n t f "p0=%s\np1=%s\n"

( p2s p0 ) ( p2s p1 ) ; ;

$ ocaml labels.ml

p0={x=1.00;y=2.00;z=3.00}

p1={x=4.00;y=5.00;z=6.00}

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

functionstypespolymorphismhigher order functionsimperative featureslabels/variants

variants

l e t f = f unct ion| ‘On −> 1| ‘ Of f −> 0| ‘Number n −> n| −> −1;;

L i s t .map f [ ‘On ; ‘ Of f ; ‘ Whatever ] ; ;

$ ocamlc -i variants.ml

val f : [> ‘Number of int | ‘Off | ‘On ] -> int

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

modules and signaturesfirst class modulesfunctors

Example:lookup

l e t empty k = r a i s e Not foundl e t l ookup t k = t k

l e t i n s e r t t a b k =i f k = athen be l s e t k

$ ocamlc -i mod1.ml

val empty : ’a -> ’b

val lookup : (’a -> ’b) -> ’a -> ’b

val insert : (’a -> ’b) -> ’a -> ’b -> ’a -> ’b

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

modules and signaturesfirst class modulesfunctors

in a module

module Lookup = s t r u c tl e t empty k = r a i s e Not foundl e t l ookup t k = t k

l e t i n s e r t t a b k =i f k = athen be l s e t k

end

l e t t0 = Lookup . empty ; ;

open Lookupl e t t1 = i n s e r t t0 5 "five" ; ;l e t t2 = lookup t0 5 ; ;

$ ocamlc -i mod2.ml

module Lookup :

sig

val empty : ’a -> ’b

val lookup : (’a -> ’b) -> ’a

-> ’b

val insert : (’a -> ’b) -> ’a -> ’b -> ’a

-> ’b

end

val t0 : ’a -> ’b

val t1 : int -> string

val t2 : ’a

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

modules and signaturesfirst class modulesfunctors

with signature

module Lookup f : s i gtype ( ’ a , ’ b ) t = ’ a −> ’ bv a l empty : ( ’ a , ’ b ) tv a l l ookup : ( ’ a , ’ b ) t −> ’ a −> ’ bv a l i n s e r t : ( ’ a , ’ b ) t −> ’ a −> ’ b −> ( ’ a , ’ b ) t

end = s t r u c ttype ( ’ a , ’ b ) t = ’ a −> ’ bl e t empty k = r a i s e Not foundl e t l ookup t k = t kl e t i n s e r t t a b k =

i f k = athen be l s e t k

endl e t t0 = Lookup f . empty ; ;l e t t1 = Lookup f . i n s e r t t0 5 "five" ; ;l e t t2 = Lookup f . l ookup t0 5 ; ;

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

modules and signaturesfirst class modulesfunctors

multiple implementations

module type L = s i gtype tv a l empty : u n i t −> tv a l l ookup :

t −> i n t −> s t r i n gv a l i n s e r t :

t −> i n t −> s t r i n g −> tend

open Lookup

module F = ( s t r u c ttype t = i n t −> s t r i n gl e t empty k = r a i s e Not foundl e t l ookup t k = t kl e t i n s e r t t a b k =

i f k = athen be l s e t k

end : L )

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

modules and signaturesfirst class modulesfunctors

multiple implementations(2)

module A = ( s t r u c ttype t = ( i n t ∗ s t r i n g ) l i s tl e t empty ( ) = [ ]l e t rec l ookup t k = match t with| [ ] −> r a i s e Not found| ( a , b ) : : r e s t −>

i f k = athen be l s e l ookup r e s t k

l e t i n s e r t t a b = (a , b ) : : tend : Lookup . L )

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

modules and signaturesfirst class modulesfunctors

multiple implementations(3)

module H = ( s t r u c ttype t = ( i n t , s t r i n g ) Hashtb l . tl e t empty ( ) = Hashtb l . c r e a t e 17l e t l ookup t k = Hashtb l . f i n d t kl e t i n s e r t t a b = Hashtb l . add t a b ; tl e t nobody w i l l know ( ) = ( )

end : Lookup . L )

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

modules and signaturesfirst class modulesfunctors

example usage

open Lookup fopen Lookup hopen Lookup a

l e t f 0 = F . empty ( ) ; ;l e t f 1 = F . i n s e r t f 0 5 "five" ; ;l e t f v = F . lookup f0 5 ; ;

l e t l 0 = A. empty ( ) ; ;l e t l 1 = A. i n s e r t l 0 5 "five" ; ;l e t l v = A. lookup l 1 5 ; ;

l e t h0 = H. empty ( ) ; ;l e t h1 = H. i n s e r t h0 5 "five" ; ;l e t hv = H. lookup h1 5 ; ;

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

modules and signaturesfirst class modulesfunctors

watch out

open Lookup hopen Lookup a

l e t no way= H. empty ( ) ; ;l e t oops = A. i n s e r t no way 5 ” f i v e ” ; ;

$ ocamlbuild liskov.byte

File "liskov.ml", line 5, characters 20-26:

Error: This expression has type Lookup_h.H.t

but an expression was expected of type

Lookup_a.A.t

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

modules and signaturesfirst class modulesfunctors

example

module type DEVICE = s i g v a l i n i t : u n i t −> un i t endmodule PDF = s t r u c t l e t i n i t ( ) = ( ) endmodule SVG = s t r u c t l e t i n i t ( ) = ( ) end

l e t d e v i c e s = Hashtb l . c r e a t e 17l e t ( ) =Hashtb l . add d e v i c e s "PDF" (module PDF: DEVICE)l e t ( ) =Hashtb l . add d e v i c e s "SVG" (module SVG : DEVICE)

module Dev ice =( v a l (

t r y Hashtb l . f i n d d e v i c e s Sys . a rgv . ( 1 )with Not found −> p r e r r e n d l i n e "Unknown device" ; e x i t 2)

: DEVICE)

l e t ( ) = Dev ice . i n i t ( ) ; ;

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

modules and signaturesfirst class modulesfunctors

Map example

module Str ingMap = Map .Make( S t r i n g )

open Str ingMap

l e t ( ) =l e t s0 = add "5" "five" empty i nl e t v = f i n d "5" s0 i nP r i n t f . p r i n t f "v=%s\n" v ; ;

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

modules and signaturesfirst class modulesfunctors

ROY

module type E = s i gtype tv a l compare : t −> t −> i n t

end

module Set = f u n c t o r ( E l t : E) −>s t r u c t

type e l ement = E l t . ttype t r e e =| Empty| Node of ( e l ement ∗

t r e e ∗ t r e e )

l e t empty = Empty

l e t rec add x s=f a i l w i t h "todo"

l e t rec mem x = f unct ion| Empty −> r a i s e Not found| Node ( e , , ) when e = x −> t r u e| Node ( e , l , r ) −>

i f E l t . compare e x < 0then mem x le l s e mem x r

end

module S t r i n g S e t = Set ( S t r i n g )

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

What is there?ad hoc objectsbasic OOparametrizationad hoc interfaces

objects

classes

interfaces

initializers

(multiple) inheritance

public/private

parametrization

open types

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

What is there?ad hoc objectsbasic OOparametrizationad hoc interfaces

immediate objects

l e t p =ob j e c tv a l mutable x = 0method g e t x = xmethod move d = x <− x + d

end

$ ocamlc -i ad hoc.ml

val p : < get_x : int; move : int -> unit >

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

What is there?ad hoc objectsbasic OOparametrizationad hoc interfaces

simple class with immutable objects

c l a s s p o i n t x y z =l e t l = s q r t ( x ∗ . x +. y ∗ . y +. z ∗ . z ) i n

o b j e c t ( s e l f )method l e n g t h = lmethod t o s t r i n g =

P r i n t f . s p r i n t f"{%.2f;%.2f;%.2f}"

x y zend

l e t ( ) =l e t p = new po i n t 1 . 2 . 3 .i nP r i n t f . p r i n t f

"p=%s;||p|| = %2.f\n"

( p # t o s t r i n g )( p # l e ng t h ) ; ;

$ ocamlc -i point class.ml

class point :

float ->

float ->

float -> object

method length : float

method to_string : string

end

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

What is there?ad hoc objectsbasic OOparametrizationad hoc interfaces

class types

c l a s s type p r i n t a b l e = ob j e c tmethod t o s : u n i t −> s t r i n g

endc l a s s p o i n t x y =ob j e c t ( s e l f : #p r i n t a b l e )

method t o s ( ) =P r i n t f . s p r i n t f "{%.2f;%.2f}"

x yendc l a s s c i r c l e p r =ob j e c t ( s e l f : #p r i n t a b l e )

method t o s ( ) =P r i n t f . s p r i n t f "C(%s,%2.f)"

( p # t o s ( ) ) rend

l e t p0 = new po i n t 0 . 0 .l e t c0 = new c i r c l e p0 1 .0l e t o b j e c t s = [ p0 ; c0 ]l e t ( ) =

L i s t . i t e r( fun o −>

l e t os = o # t o s ( ) i nP r i n t f . p r i n t f "%s\n" os )

o b j e c t s ; ;

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

What is there?ad hoc objectsbasic OOparametrizationad hoc interfaces

gotchas

calls on self during construction?

downcasts?

polymorphic methods?

polymorphic exceptions?

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

What is there?ad hoc objectsbasic OOparametrizationad hoc interfaces

parametrization

c l a s s [ ’ a ] l i n k e d l i s t ( a : ’ a ) = ob j e c tv a l mutable next = Nonemethod s e t n e x t ( t a i l : ’ a l i n k e d l i s t ) =

next <− Some t a i lend

l e t ( ) =l e t l 0 = new l i n k e d l i s t "a" i nl e t l 1 = new l i n k e d l i s t "b" i nl 0 # s e t n e x t l 1 ; ;

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

What is there?ad hoc objectsbasic OOparametrizationad hoc interfaces

example

l e t l o g o o x =l e t k s = l e t os = o # t o s t r i n g ( ) i n

Lwt log . debug ( os ˆ": " ˆ s )i nP r i n t f . k s p r i n t f k x

$ ocamlfind ocamlc -i -package lwt.unix log o.ml

val log_o :

< to_string : unit -> string; .. > ->

(’a, unit, string, unit Lwt.t) format4 -> ’a

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

ocamlc, ocamlopt, ocamlc.opt, ocamlopt.opt

ocamlfind

ocamlbuild

emacs, eclipse, omlet, camelia, . . .

others

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

ocamlfind

knows which packages you have

fills in details for the compilers

Example

$ ocamlopt EchoServer.ml

File "EchoServer.ml", line 1, characters 0-1:

Error: No implementations provided for

the following modules:

Unix referenced from EchoServer.cmx

$ ocamlopt.opt /.../lib/ocaml/unix.cmxa EchoServer.ml

$ ocamlfind

ocamlopt -package unix -linkpkg EchoServer.ml

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

ocamlbuild

builds things

declarative

target extension

plugins for (c)libraries, documentation, profiler,...

tags

myocamlbuild.ml

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

IDEs

emacs: tuareg

eclipse: ocaide http://www.algo-prog.info/ocaide/

camelia http://camelia.sourceforge.net/

vim: omlet

. . . lots of dead projects

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

developing applications with OCamlhttp://caml.inria.fr/pub/docs/oreilly-book/

The Objective Caml system http:

//caml.inria.fr/pub/docs/manual-ocaml/index.html

Jane street bloghttp://ocaml.janestreet.com/?q=node/89

Lambda The Ultimate http://lambda-the-ultimate.org/

Romain Slootmaekers OCaml walkthrough

What is ocaml?basic programming

modules/signatures/functorsobject orientation

toolsthings to read

advanced stuff

. . . Next time

Romain Slootmaekers OCaml walkthrough

top related