Nice guide! Just wanted to say that the final example can be simplified a bit. O.map and O.fromNullable can be replaced with a single function: O.fromNullable. pipe( foo, O.fromNullable, O.chain(O.fromNullableK(({bar}) => bar)), O.chain(O.fromNullableK(({buzz}) => buzz)) ) TS playground