Created
March 9, 2022 21:08
-
-
Save andimiller/1d0193c5cae9fc0917f46120751bf4c1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- Represents a chainable functional stream | |
-- mutable versions of methods are available under .mutate | |
function Stream(tbl) | |
stream = { values = tbl, mutate = {} } | |
function stream.mutate.map(f) | |
transform(stream.values, f) | |
return stream | |
end | |
function stream.map(f) | |
stream.values = map(stream.values, f) | |
return stream | |
end | |
function stream.tap(f) | |
tap(stream.values, f) | |
return stream | |
end | |
function stream.filter(f) | |
stream.values = filter(stream.values, f) | |
return stream | |
end | |
function stream.mutate.filter(f) | |
filterInplace(stream.values, f) | |
return stream | |
end | |
function stream.dump() | |
printtable(stream.values) | |
return stream | |
end | |
function stream.foldLeft(initial, merge) | |
return foldLeft(stream.values, initial, merge) | |
end | |
return stream | |
end | |
function foldLeft(tbl, initial, merge) | |
local acc = initial | |
for k, v in pairs(tbl) do | |
acc = merge(acc, v) | |
end | |
return acc | |
end | |
function printtable(tbl) | |
for k, v in pairs(tbl) do | |
print(k, "->", v) | |
end | |
end | |
function filter(tbl, f) | |
local t = {} | |
for k, v in pairs(tbl) do | |
if f(v) then t[k] = v end | |
end | |
return t | |
end | |
function filterInplace(tbl, f) | |
for k, v in pairs(tbl) do | |
if not f(v) then tbl[k] = nil end | |
end | |
end | |
function tap(tbl, f) | |
for k, v in pairs(tbl) do | |
f(v) | |
end | |
return tbl | |
end | |
function map(tbl, f) | |
local t = {} | |
for k,v in pairs(tbl) do | |
t[k] = f(v) | |
end | |
return t | |
end | |
function transform(tbl, f) | |
for k,v in pairs(tbl) do | |
tbl[k] = f(v) | |
end | |
return tbl | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment