An implementation of Reader Monad in Moonbit
moon add colmugx/readerpub struct Reader[Env, A] {
// private fields
}///|
test "Reader::bind" {
let reader1 = Reader::pure(5)
let reader2 = reader1.bind(fn { x => Reader::pure(x * 2) })
inspect!(reader2.run(0), content="10")
}///|
test "Reader::local_" {
let reader = Reader::new(fn { env => env * 2 })
let modified = reader.local_(fn { env => env + 1 })
inspect!(modified.run(5), content="12")
}test "Reader::pure" {
let reader = Reader::pure("constant")
inspect(reader.run(42), content="constant")
}///|
test "Reader::run" {
let reader = Reader::new(fn { env => env + 1 })
inspect!(reader.run(41), content="42")
}test "ask" {
let reader = ask()
inspect(reader.run("hello"), content="hello")
}///|
test "asks" {
let reader = asks(fn { env => env + 1 })
inspect!(reader.run(41), content="42")
}An implementation of Reader Monad in Moonbit