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.ml
* ./bible < bible.txt
*)
{
module L = Lexing
let get = L.lexeme
let sprintf = Printf.sprintf
@lindig
lindig / basic-module-design.md
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
end
\documentclass[a4paper,12pt]{article}
\usepackage{fullpage}
\usepackage[latin1]{inputenc}
\usepackage{graphicx}
\usepackage{xspace}
% PDF stuff
\ifx\pdfoutput\undefined
\else
\pdfpagewidth=210mm
(*
* 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
lindig / func.ml
Created October 7, 2016 08:38
OCaml Functors - small examples
==> func0.ml <==
module Debug = struct
let debug msg = Printf.eprintf "debug: %s\n" msg
let error msg = Printf.eprintf "error: %s\n" msg
end
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
lindig / xs-dinghy.sh
Last active September 23, 2016 20:06
Run tests on XenServer by downloading and installing micro-kernel VM
#! /bin/sh
set -ex
VERSION="0.1.17"
GH="https://github.com/lindig"
VM="$GH/xen-test-vm/releases/download/$VERSION/test-vm.xen.gz"
KERNEL="xen-test-vm-${VERSION//./-}.xen.gz"
GUEST="/boot/guest"
IMG="$GUEST/$KERNEL"