Module Garter_List

include module type of Belt.List;
type t('a) = list('a);
let length: t('a) => int;
let size: t('a) => int;
let head: t('a) => option('a);
let headExn: t('a) => 'a;
let tail: t('a) => option(t('a));
let tailExn: t('a) => t('a);
let add: t('a) => 'a => t('a);
let get: t('a) => int => option('a);
let getExn: t('a) => int => 'a;
let make: int => 'a => t('a);
let makeByU: int => Js.Fn.arity1((int => 'a)) => t('a);
let makeBy: int => (int => 'a) => t('a);
let shuffle: t('a) => t('a);
let drop: t('a) => int => option(t('a));
let take: t('a) => int => option(t('a));
let splitAt: t('a) => int => option((list('a), list('a)));
let concat: t('a) => t('a) => t('a);
let concatMany: array(t('a)) => t('a);
let reverseConcat: t('a) => t('a) => t('a);
let flatten: t(t('a)) => t('a);
let mapU: t('a) => Js.Fn.arity1(('a => 'b)) => t('b);
let map: t('a) => ('a => 'b) => t('b);
let zip: t('a) => t('b) => t(('a, 'b));
let zipByU: t('a) => t('b) => Js.Fn.arity2(('a => 'b => 'c)) => t('c);
let zipBy: t('a) => t('b) => ('a => 'b => 'c) => t('c);
let mapWithIndexU: t('a) => Js.Fn.arity2((int => 'a => 'b)) => t('b);
let mapWithIndex: t('a) => (int => 'a => 'b) => t('b);
let fromArray: array('a) => t('a);
let toArray: t('a) => array('a);
let reverse: t('a) => t('a);
let mapReverseU: t('a) => Js.Fn.arity1(('a => 'b)) => t('b);
let mapReverse: t('a) => ('a => 'b) => t('b);
let forEachU: t('a) => Js.Fn.arity1(('a => 'b)) => unit;
let forEach: t('a) => ('a => 'b) => unit;
let forEachWithIndexU: t('a) => Js.Fn.arity2((int => 'a => 'b)) => unit;
let forEachWithIndex: t('a) => (int => 'a => 'b) => unit;
let reduceU: t('a) => 'b => Js.Fn.arity2(('b => 'a => 'b)) => 'b;
let reduce: t('a) => 'b => ('b => 'a => 'b) => 'b;
let reduceWithIndexU: t('a) => 'b => Js.Fn.arity3(('b => 'a => int => 'b)) => 'b;
let reduceWithIndex: t('a) => 'b => ('b => 'a => int => 'b) => 'b;
let reduceReverseU: t('a) => 'b => Js.Fn.arity2(('b => 'a => 'b)) => 'b;
let reduceReverse: t('a) => 'b => ('b => 'a => 'b) => 'b;
let mapReverse2U: t('a) => t('b) => Js.Fn.arity2(('a => 'b => 'c)) => t('c);
let mapReverse2: t('a) => t('b) => ('a => 'b => 'c) => t('c);
let forEach2U: t('a) => t('b) => Js.Fn.arity2(('a => 'b => 'c)) => unit;
let forEach2: t('a) => t('b) => ('a => 'b => 'c) => unit;
let reduce2U: t('b) => t('c) => 'a => Js.Fn.arity3(('a => 'b => 'c => 'a)) => 'a;
let reduce2: t('b) => t('c) => 'a => ('a => 'b => 'c => 'a) => 'a;
let reduceReverse2U: t('a) => t('b) => 'c => Js.Fn.arity3(('c => 'a => 'b => 'c)) => 'c;
let reduceReverse2: t('a) => t('b) => 'c => ('c => 'a => 'b => 'c) => 'c;
let everyU: t('a) => Js.Fn.arity1(('a => bool)) => bool;
let every: t('a) => ('a => bool) => bool;
let someU: t('a) => Js.Fn.arity1(('a => bool)) => bool;
let some: t('a) => ('a => bool) => bool;
let every2U: t('a) => t('b) => Js.Fn.arity2(('a => 'b => bool)) => bool;
let every2: t('a) => t('b) => ('a => 'b => bool) => bool;
let some2U: t('a) => t('b) => Js.Fn.arity2(('a => 'b => bool)) => bool;
let some2: t('a) => t('b) => ('a => 'b => bool) => bool;
let cmpByLength: t('a) => t('a) => int;
let cmpU: t('a) => t('a) => Js.Fn.arity2(('a => 'a => int)) => int;
let cmp: t('a) => t('a) => ('a => 'a => int) => int;
let eqU: t('a) => t('a) => Js.Fn.arity2(('a => 'a => bool)) => bool;
let eq: t('a) => t('a) => ('a => 'a => bool) => bool;
let hasU: t('a) => 'b => Js.Fn.arity2(('a => 'b => bool)) => bool;
let has: t('a) => 'b => ('a => 'b => bool) => bool;
let getByU: t('a) => Js.Fn.arity1(('a => bool)) => option('a);
let getBy: t('a) => ('a => bool) => option('a);
let keepU: t('a) => Js.Fn.arity1(('a => bool)) => t('a);
let keep: t('a) => ('a => bool) => t('a);
let filter: t('a) => ('a => bool) => t('a);
let keepWithIndexU: t('a) => Js.Fn.arity2(('a => int => bool)) => t('a);
let keepWithIndex: t('a) => ('a => int => bool) => t('a);
let filterWithIndex: t('a) => ('a => int => bool) => t('a);
let keepMapU: t('a) => Js.Fn.arity1(('a => option('b))) => t('b);
let keepMap: t('a) => ('a => option('b)) => t('b);
let partitionU: t('a) => Js.Fn.arity1(('a => bool)) => (t('a), t('a));
let partition: t('a) => ('a => bool) => (t('a), t('a));
let unzip: t(('a, 'b)) => (t('a), t('b));
let getAssocU: t(('a, 'c)) => 'b => Js.Fn.arity2(('a => 'b => bool)) => option('c);
let getAssoc: t(('a, 'c)) => 'b => ('a => 'b => bool) => option('c);
let hasAssocU: t(('a, 'c)) => 'b => Js.Fn.arity2(('a => 'b => bool)) => bool;
let hasAssoc: t(('a, 'c)) => 'b => ('a => 'b => bool) => bool;
let removeAssocU: t(('a, 'c)) => 'b => Js.Fn.arity2(('a => 'b => bool)) => t(('a, 'c));
let removeAssoc: t(('a, 'c)) => 'b => ('a => 'b => bool) => t(('a, 'c));
let setAssocU: t(('a, 'c)) => 'a => 'c => Js.Fn.arity2(('a => 'a => bool)) => t(('a, 'c));
let setAssoc: t(('a, 'c)) => 'a => 'c => ('a => 'a => bool) => t(('a, 'c));
let sortU: t('a) => Js.Fn.arity2(('a => 'a => int)) => t('a);
let sort: t('a) => ('a => 'a => int) => t('a);
let isEmpty: Belt.List.t('a) => bool;
let takeExn: Belt.List.t('a) => int => Belt.List.t('a);
let dropExn: Belt.List.t('a) => int => Belt.List.t('a);
let splitAtExn: Belt.List.t('a) => int => (Belt.List.t('a), Belt.List.t('a));
let reduce1U: list('a) => Js.Fn.arity2(('a => 'a => 'a)) => 'a;
let reduce1: list('a) => Js.Fn.arity2(('a => 'a => 'a)) => 'a;