Well here's one law you should have with just unit
and join
. Given x :: m a
,
join (unit x) = x
To show that this didn't just come from nowhere, let's start with an existing monad law:
return x >>= f = f x
Given that m >>= f = join (fmap f m)
join (fmap f (return x)) = f x
Select f = id
join (fmap id (return x)) = id x
Use the functor law that fmap id = id
join (id (return x)) = id x
Use the obvious id a = a
join (return x) = x