Skip to content

Instantly share code, notes, and snippets.

@jchavarri
jchavarri / SlotsCreateComponentWorking.re
Created January 6, 2019 11:43
SlotsCreateComponentWorking.re
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)));
@jchavarri
jchavarri / SlotsCreateComponent.re
Created January 6, 2019 11:29
SlotsCreateComponent.re
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)));
module HookTypes = {
type state('a);
type effect;
type t('t);
let addState: (~state: 'state, t('t)) => t(('t, state('state))) =
(~state as _, x) => Obj.magic(x);
let addEffect: t('t) => t(('t, effect)) = Obj.magic;
};
@jchavarri
jchavarri / options.re
Last active November 23, 2017 10:06
Reason: Create JS object with optional properties
type startOptionsJS;
[@bs.obj]
external makeStartOptionsJS :
(
~host: string=?,
~port: int=?,
~serialoscHost: string=?,
~serialoscPort: int=?,
~startDevices: Js.boolean=?,
@jchavarri
jchavarri / withoutName.re
Created November 12, 2017 14:06
HOCs in Reason?
module type ReactComponent = {
let component: ReasonReact.componentSpec(ReasonReact.stateless, ReasonReact.stateless, ReasonReact.noRetainedProps, ReasonReact.noRetainedProps, ReasonReact.actionless);
/* This is the main issue, each component has its own make signature */
let make: 'a => ReasonReact.componentSpec(ReasonReact.stateless, ReasonReact.stateless, ReasonReact.noRetainedProps, ReasonReact.noRetainedProps, ReasonReact.actionless);
};
module Greeting: ReactComponent = {
let component = ReasonReact.statelessComponent("Greeting");
let make = (_children) => {
...component,
@jchavarri
jchavarri / lexer.re
Last active October 2, 2017 22:22
A lexer for the List-to-C compiler
let tokenizer input => {
let rec tok input current tokens =>
switch input {
| [] => List.rev tokens
| _ =>
let head = List.hd input;
let tail = List.tl input;
let next = tok tail;
switch (head, current, tokens) {
/* State: None */
@jchavarri
jchavarri / explode.re
Created September 29, 2017 23:34
A small util to split a string in an array of chars
let explode s => {
let rec exp i l =>
if (i < 0) {
l
} else {
exp (i - 1) [s.[i], ...l]
};
exp (String.length s - 1) []
};
@jchavarri
jchavarri / automaton.re
Created September 29, 2017 23:15
Reason tutorial: automaton
type tokenMachine = {
current: option token,
parsed: list token
};
let machine = {current: None, parsed: []};
@jchavarri
jchavarri / token.re
Created September 29, 2017 23:12
Reason: lexer types
type token =
| OpenParen
| CloseParen
| Number string
| String string
| Name string;
@jchavarri
jchavarri / shape.re
Last active September 27, 2017 23:50
Reason: variant type
type shape =
| Circle float
| Rectangle float float
| Prism float float float;
let rect = Rectangle 2.5 5.0;