
10 Nov
2008
10 Nov
'08
7:56 p.m.
In the crypto package, I have two functions
encrypt :: AESKey a => a -> Word128 -> Word128 decrypt :: AESKey a => a -> Word128 -> Word128
which are exported. I also have
class (Bits a, Integral a) => AESKey a
instance AESKey Word128 instance AESKey Word192 instance AESKey Word256
unexported which stops you using invalid keys. Someone has asked me to export AESKey as they want to write an explicit type signature for a function they are creating e.g. foo :: AESKey a => a -> Word128 -> Word128 foo x y = encrypt x y 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? Thanks, Dominic.