Bulat Ziganshin wrote:
Hello Dominic,
Monday, November 10, 2008, 10:56:37 PM, you wrote:
but this generates an error. Is there a way of allowing someone to use
AESKey in a type signature but not allow them to declare new instances?
afaik
module AES (class AESKey,...)
This seems not to work on ghc6.8.2 at least.
$ cat AClass.hs ; ghc AClass.hs
module AClass (class A) where
class A a where f :: a -> ()
instance A () where f = id
AClass.hs:1:15: parse error on input `class'
Alas I don't know of any way to export a class for type signatures
without exporting it for instantiation (corrections welcome :)
There is, however, a fairly canonical hack if you're only concerned with
the correctness of the code in your own library. You create an extra
(empty) public class which is only an indirection for the real private
class; and make sure your library only uses the real class. This way,
even though clients can make new instances on the public class, that
won't affect your own code.
If your goal is to try to ensure the correctness of client code (not
just the correctness of the library code), this trick doesn't help though.
--
Live well,
~wren
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe