Mirror: 馃帺 A tiny but capable push & pull stream library for TypeScript and Flow
at v4.0.4 1.2 kB view raw
1type t('a) = array('a); 2 3external fromArray: array('a) => t('a) = "%identity"; 4external toArray: t('a) => array('a) = "%identity"; 5[@bs.new] external make: unit => t('a) = "Array"; 6[@bs.set] external clear: (t('a), [@bs.as 0] _) => unit = "length"; 7[@bs.send] external add: (t('a), 'a) => unit = "push"; 8[@bs.get] external peek: t('a) => option('a) = "0"; 9[@bs.send] external pop: t('a) => option('a) = "shift"; 10[@bs.send] external copy: t('a) => t('a) = "slice"; 11[@bs.get] external size: t('a) => int = "length"; 12[@bs.send] external mapU: (t('a), (. 'a) => 'b) => t('b) = "map"; 13[@bs.send] external map: (t('a), 'a => 'b) => t('b) = "map"; 14[@bs.send] external forEachU: (t('a), (. 'a) => unit) => unit = "forEach"; 15[@bs.send] external forEach: (t('a), 'a => unit) => unit = "forEach"; 16 17let isEmpty = (q: t('a)): bool => size(q) === 0; 18 19let reduceU = (q: t('a), accu: 'b, f: (. 'b, 'a) => 'b): 'b => 20 Js.Array.reduce((acc, x) => f(. acc, x), accu, q); 21 22let reduce = (q: t('a), accu: 'b, f: ('b, 'a) => 'b): 'b => 23 Js.Array.reduce(f, accu, q); 24 25[@bs.scope ("Array", "prototype", "push")] [@bs.val] 26external addMany: (t('a), t('a)) => unit = "apply"; 27 28let transfer = (q1: t('a), q2: t('a)) => { 29 addMany(q1, q2); 30 clear(q1); 31};