This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
type (_,_) nuple = | |
| Z : (unit,unit) nuple | |
| P: ('a * ('b,'c) nuple) -> ('a, ('b,'c) nuple ) nuple | |
let p=P(1, P("try", P( [4,5], Z))) | |
let rec map: 'a 'b 'c 'd 'e 'f. ('a,'b) nuple -> ('c,'d) nuple ->('e,'f) nuple= | |
fun fs ps -> match (fs,ps ) with |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let pp = Printf.printf | |
module Explanation = struct | |
pp "At the begining of a module (or the beginning of the file),"; | |
pp "we start in execution mode\n."; | |
pp "We can have a" ; | |
pp "comma separated list of expression which is evaluted"; | |
pp "at the top-level of the module.\n" | |
open List [@@remark "This is not an expression: we exit evalation mode" ] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module K = struct | |
let ( * ) = ( *. ) | |
let ( + ) = ( +. ) | |
let ( / ) = ( /. ) | |
let ( - ) = ( -. ) | |
let ( ~- ) = ( ~-. ) | |
end | |
module V = struct | |
let zero = 0., 0., 0. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
type nil | |
(* heteregenous list with no concatenation *) | |
type 'list t = | |
| Nil: nil t | |
| Cons: 'a * 'b t -> ('a -> 'b) t | |
(* concatenation helper *) | |
type (_,_, _ ) helper = | |
| Z : ( nil , 'e, 'e) helper | |
| S: ('a,'b, 'e) helper -> ('c -> 'a, 'c -> 'b, 'e) helper |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let d = 3 | |
let m = 1000 | |
let replicate_with_failures k rng st = | |
let rec aux l k = | |
if k = 0 then l else | |
match rng st with | |
| Some x -> aux (x::l) (k-1) | |
| None -> aux l (k-1) in |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Natl =struct | |
type z = Nil_z | |
type 'a succ = Nil_succ | |
end | |
open Natl | |
type _ t = | |
| Nil: <f:'a; t:'a; dim:z > t | |
| Cons: | |
'elt * <f:'ty; t:'ret; dim:'d > t -> <f: 'elt -> 'ty; t:'ret; dim:'d succ> t |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module N : sig | |
type +'a t = private int | |
val create : int -> 'a t | |
end= struct | |
type +'a t = int | |
let create n = n | |
end | |
type nil = private Nil_type |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(* empty type*) | |
type void = private Void | |
(* list type *) | |
type _ hlist = | |
| Nil: void hlist | |
| Cons: | |
'elt * 'a hlist -> ( 'elt * 'a ) hlist | |
let rec length: type a. a hlist -> int = function%with_ll |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
type 'a t = | |
| Leaf of 'a | |
| Node of (int -> 'a) t * (int -> 'a) t | |
let l = Leaf ();; | |
let f n = n | |
let g n k = n + k | |
let n = Node(Leaf f, Leaf f) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module type s = sig | |
type 'a t | |
val hash : 'a t -> int | |
val equal : 'a t -> 'a t -> bool | |
end | |
module Id: s = struct | |
type 'a t = { | |
id : int; |
OlderNewer