-- | Express Left Identity in Haskell

prop_left_identity_HS :: (Eq (m a), Eq (m b)) => (Arrow a (m a)) -> (Arrow (m a) (Arrow (Arrow a (m b)) (m b)))
                      -> a -> (Arrow a (m b))
                      -> Bool
prop_left_identity_HS unit bind x f
  = runFun (runFun bind (runFun unit x)) f == runFun f x
prop_left_identity_HS :: (Eq (m a), Eq (m b)) => (Arrow a (m a)) -> (Arrow (m a) (Arrow (Arrow a (m b)) (m b)))
                      -> a -> (Arrow a (m b))
                      -> Bool
prop_left_identity_HS unit bind x f
  = runFun (runFun bind (runFun unit x)) f == runFun f x
prop_left_identity_HS unit bind x f
  = runFun (runFun bind (runFun unit x)) f == runFun f x