On 2/5/07, Yitzchak Gale <[EMAIL PROTECTED]> wrote:
J. Garrett Morris wrote:
> Mainly to keep the type error messages simpler.

There are two ways to get around that problem:

1. Make your functions polymorphic, using
MonadState, MonadError, etc. Each function
mentions only the capabilities that it needs,
without having the whole monad stack in its type.

Again, from the earlier example, I'm not sure how typing:

apply :: (MonadCont m, MonadState Blargh m, MonadError Fzzt m, MonadIO m) =>
 Handle -> Attribute a -> m a

is simpler than

apply :: Handle -> Attribute a -> m a

especially when almost every function in the project would have
required the same constraint list.

2. Use a type alias for the monad stack.

At least as of 6.4.2, GHC printed the expanded types, not the aliases,
in error messages.

(There are other big advantages of both of these.)

Those being?

/g

--
It is myself I have never met, whose face is pasted on the underside of my mind.
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to