
-- fmap a -> fa -> fb -> f f b
addOne :: Num a => a  -> [a]
addOne x = [x, 1]

func1 :: Num a => (a -> [a]) -> [a] -> [[a]]
func1  f l = f <$> l

result = func1 addOne [1,2,3]

bind' :: Monad m => ( a -> m b ) -> m a -> m b
bind' f  =  join . fmap f 

-- liftA :: Applicative f => (a -> b) -> f a -> f b