Skip to content

Instantly share code, notes, and snippets.

@Lucifier129
Created June 30, 2018 01:27
Show Gist options
  • Save Lucifier129/1172cbefce49205e0391be2c69aa5921 to your computer and use it in GitHub Desktop.
Save Lucifier129/1172cbefce49205e0391be2c69aa5921 to your computer and use it in GitHub Desktop.
var noop = () => {}
var compose = (f1, f2) => (...args) => f1(f2(...args))
var range = (start, end) => {
let n = start
let f = (next, complete) => {
if (n <= end) {
next(n++)
f(next, complete)
} else {
complete()
}
}
return f
}
var map = (source, f) => (next, complete) => source(value => next(f(value)), complete)
var reverse = source => {
let f
return (next, complete) => {
let composeNext = value => {
let feedValue = () => next(value)
f = compose(
f,
feedValue
)
}
f = complete
source(composeNext, () => f())
}
}
var foreach = (source, f) => source(f, noop)
var numbers = range(1, 10)
numbers = map(numbers, function(n) {
return n * n
})
numbers = reverse(numbers)
foreach(numbers, console.log)
@fc01
Copy link

fc01 commented Aug 5, 2021

type List = (i: number) => number

const range = (a: number, b: number): List =>
    i => i === -6666 ? b - a + 1 : a + i

const map = (list: List, f: (n: number) => number): List =>
    i => i === -6666 ? list(-6666) : f(list(i))

const reverse = (list: List): List =>
    i => i === -6666 ? list(-6666) : list(list(-6666) - 1 - i)


const foreach = (list: List, f: (n: number) => void) => {
    for (let i = 0; i < list(-6666); i++)f(list(i))
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment