Gen functions

Can you give this a once over, i remember the last time I made some pretty silly mistakes.
I think it's worthwhile. You're either going to have to deal with a `Maybe` coming out or a `NEL` going in. So you've pretty much gotta deal with something.

Plus, one more comonad :)