pure (== return) :: (Applicative f) => a -> f a <$> (== fmap) :: (Functor f) => (a -> b) -> (f a -> f b) join :: (Monad m) => m (m a) -> m a
pure x = [x] odd <$> [1,2,3] == [True, False, True] join [[1,2], [3], [4,5]] = [1,2,3,4,5]