[Haskell-cafe] Classes in type declarations in Hugs

John Meacham john at repetae.net
Fri Dec 3 19:05:10 EST 2004


On Fri, Dec 03, 2004 at 11:16:19AM -0600, John Goerzen wrote:
> On Fri, Dec 03, 2004 at 11:59:23AM -0500, Scott Turner wrote:
> > On 2004 November 30 Tuesday 11:04, John Goerzen wrote:
> > > type CPResult a = MonadError CPError m => m a
> > 
> > You've got an existential type here.  (Was that the intent?)
> 
> Yes.  It was so that I could make the return types of some various
> functions easier to type and deal with.  Problem with using a data type
> is that the result is no longer directly in MonadError, nor usable as an
> Either.  I wound up just manually expanding it.  Thanks, though, for the
> feedback.

This is where I find ghc's newtype deriving to be incredibly useful.

newtype CPError a = CPError (Either Error a) 
        deriving(Monad,MonadError)

now CPError is a monad and an instance of MonadError and you are free to
override or inherit more interesting instances at will without
conflicting with the basic types for Either :) I have come to
the conclusion that 'type' is rarely a good idea when you have the
newtype deriving trick available to you. (of course, others come to
different conclusions so take with a grain of salt)

        John

-- 
John Meacham - ⑆repetae.net⑆john⑈ 


More information about the Haskell-Cafe mailing list