sure, i’d like to think i can:
for option:
let getOrElse = (opt, fn) => switch opt {
| Some(val) => val
| None => fn()
}
also repeat/reduce (see below):
for result:
let getOr = (res, err) =>
switch res {
| Ok(val) => val
| Err(_) => err
}
let getOrElse = (res, fn) =>
switch res {
| Ok(val) => val
| Err(_) => fn()
}
let map = (res, fn) =>
switch res {
| Ok(val) => Ok(fn(val))
| Err(err) => Err(err)
}
let mapErr = (res, fn) =>
switch res {
| Ok(val) => Ok(val)
| Err(err) => Err(fn(err))
}
let andThen = (res, fn) =>
switch res {
| Ok(val) => fn(val)
| Err(err) => Err(err)
}
let orElse = (res, fn) =>
switch res {
| Ok(val) => Ok(val)
| Err(err) => fn(err)
}
let rec repeat = (res, fn) =>
switch res {
| Ok(val) =>
switch fn(val) {
| Ok(Some(ret)) => repeat(Ok(ret), fn)
| Ok(None) => res
| Err(err) => Err(err)
}
| Err(err) => Err(err)
}
i’ll think some more about option and see what else i can come up with. the looping (repeat//reduce) functionality is important because there’s no good way to break or return from loops