Skip to content

Instantly share code, notes, and snippets.

View cristianoc's full-sized avatar

Cristiano Calcagno cristianoc

View GitHub Profile
module Button = {
type size =
| Small
|
| Medium
| Large;
};
module Button = {
type size =
type other;
let compareOther: (other, other) => int = assert(false);
let equalOther: (other, other) => bool = assert(false);
type runtimeValue =
| Undefined
| BoxUndefined(int)
| Null
| Other(other);
@cristianoc
cristianoc / Hooks.re
Created October 28, 2018 04:58
Essence of Hooks
let foo = (~name, ~surname, _) => {
print_string("name: " ++ name);
print_string("surname: " ++ surname);
};
module State: {
type t('a);
let init: 'a => t('a);
let get: t('a) => 'a;
let set: (t('a), 'a) => unit;
module HookTypes = {
type state('a);
type effect;
type t('t);
let addState: (t('t), ~state: 'state) => t(('t, state('state))) =
(x, ~state as _) => Obj.magic(x);
let addEffect: t('t) => t(('t, effect)) = Obj.magic;
};
module State: {
type t('a);
let createSlot: (t('a) => 'b) => 'b;
let useHook: ('a, t('a)) => ('a, 'a => unit);
} = {
type t('a) = ref(option('a));
let createSlot = cont => cont(ref(None));
let useHook = (initial: 'a, slot: t('a)) => {
let state =
switch (slot^) {
module type SlotsType = {
type t('slot, 'nextSlots);
let create: unit => t('slot, 'nextSlots);
let use:
(
~default: 'slot,
('slot, t('slot2, 'nextSlots)) => 'c,
t('slot, t('slot2, 'nextSlots))
) =>
'c;
module type SlotsType = {
type t('slot, 'nextSlots);
let create: unit => t('slot, 'nextSlots);
let use:
(~default: 'slot, t('slot, t('slot2, 'nextSlots))) =>
('slot, t('slot2, 'nextSlots));
};
module Slots: SlotsType = {
type t('slot, 'nextSlots) = ref(option(('slot, 'nextSlots)));
and parseInt = (p: Parser.t) => {
let res =
switch (p.token) {
| Int(n) => n
| _ =>
Parser.err(p, "integer expected");
(-1);
};
Parser.next(p);
res;
$ Blacklist=test ../node_modules/.bin/gentype -dce-cmt .
Warning Dead Analysis Cycle
stdlib-406/lexing.mli
Results for stdlib-406/lexing.mli could be inaccurate because of circular references
Warning Dead Analysis Cycle
stdlib-406/pervasives.mli
Results for stdlib-406/pervasives.mli could be inaccurate because of circular references
module M : sig end =
struct
let x0 = fun _ -> [0]
let x1 = fun _ -> [1]
let x2 = fun _ -> [2]
let x3 = fun _ -> [3]
let x4 = fun _ -> [4]
let x5 = fun _ -> [5]
let x6 = fun _ -> [6]
let x7 = fun _ -> [7]