extract :: w a -> a
is the dual of
pure :: a -> m a
(w is the dual of m, ofc)
and
duplicate :: w a -> w (w a)
is the dual of
join :: m a -> m (m a)
the dual of (>>=) is called extend
ohh, so:
extend :: (w a -> b) -> w a -> w b
is the dual of
bind :: m a -> (a -> m b) -> m b
now wondering what programming with codo would look like… is that a thing?