Skip to content

Instantly share code, notes, and snippets.

View lindig's full-sized avatar

Christian Lindig lindig

View GitHub Profile
* ocamllex bible.mll && ocamlopt -o bible
* ./bible < bible.txt
module L = Lexing
let get = L.lexeme
let sprintf = Printf.sprintf
lindig /
Last active April 29, 2019 09:45
Basic considerations when creating a module in OCaml

Basic Module Design

First-In-First-Out Stack

module FIFO : sig
  exception Empty

  type 'a t

val empty: 'a t

(* short names for important modules *)
module L = Lexing
module B = Buffer
type token =
| STR of string
| VAR of string
#! /usr/bin/env ruby
# Report code size by OCaml module in a native binary
require 'set'
require 'getoptlong'
class OCamlModule
include Comparable
module type Monad = sig
type 'a t
val return: 'a -> 'a t
val bind: 'a t -> ('a -> 'b t) -> 'b t
% PDF stuff
* ocamlbuild -pkg unix assoc_timing.native
* When visiting all keys in an association list, when does it
* make sense to build a map first? According to this,
* building the map is amortised for list longer than 20 to 30
* elements.
module Int = struct
lindig /
Created October 7, 2016 08:38
OCaml Functors - small examples
==> <==
module Debug = struct
let debug msg = Printf.eprintf "debug: %s\n" msg
let error msg = Printf.eprintf "error: %s\n" msg
let main () =
let argv = Array.to_list Sys.argv in
(* Creating a directory with a given ownership and permissions looks
simple until you take closer look. Many things can fail: you might
not have the permissions to create or modify it, the desired groups
and owners might not exist.
This library tries to be systematic about it and de-composes the
complex operation (implemented in [mk]) into many small operations
that are stringed together in a monad: [>>=] sequences operations
and [//=] (read as: "or-else") recovers from a previous error.
lindig /
Last active September 23, 2016 20:06
Run tests on XenServer by downloading and installing micro-kernel VM
#! /bin/sh
set -ex