reintroduce "base" monads rather than using transformers + identity,
for perf