[Haskell-cafe] closed classes
Duncan Coutts
duncan.coutts at worcester.oxford.ac.uk
Fri Aug 6 10:57:04 EDT 2004
On Fri, 2004-08-06 at 15:44, Malcolm Wallace wrote:
> > Hmm...doesn't
> >
> > --8<--
> > module Closed(foo) where
> > class C a where foo = ...
> > instance C ...
> > --8<--
> > module Main where
> > import Closed
> > ...foo...
> > --8<--
> >
> > do what you want? You can only use existing instances of C, but not
> > declare them (outside of the Closed module), IIUC.
>
> Ah, but now you cannot use (Closed t) => as a predicate in type
> signatures, and since you cannot write a partial signature, you must
> omit the signature altogether...
A similar non-solution is to export the class name but not the class
methods, so you cannot defined them in other modules.
However this doesn't help if there are default methods or no methods,
you can still say:
instance ClosedClass Foo
Note the lack of 'where' keyword.
Granted, for most classes this would stop other modules interfering but
it doesn't give the optimisation opportunities or the better overlapping
instance detection.
Duncan
More information about the Haskell-Cafe
mailing list