Motivation of having Functional Dependencies

Viewed 377

What is the motivation of having functional dependencies in Haskell ?

One example of a functional dependency:

class (Monad m) => MonadSupply s m | m -> s where
  next :: m (Maybe s)

It is stated in the RWH book, that functional dependency helps the type checker. How does it actually help ?

Also, this piece of code actually compiles:

class (Monad m) => MonadSupply s m where
      next :: m (Maybe s)

But I guess, it will produce an runtime error.

1 Answers
Related