
On Fri, Jul 24, 2009 at 6:16 PM, Patrick
LeBoutillier
In the declaration of the class IPAddr, is there any way to force that the IPHost and IPMask types are made up from the same IPBits type? Basically I would like the compiler to enforce that Word (Host a) and Word (Mask a) be the same type for a specific instance of IPAddr.
Unfortunately, this has not been implemented yet (in 6.10), though it should be in a future version of GHC (pretty soon probably), you'll then be able to write :
class (IPHost (Host a), IPMask (Mask a), Word (Host a) ~ Word (Mask a)) => IPAddr a where
but for now you must content yourself with adding it to the function context :
-- Takes an IPAddr and returns another one describing the network subnet :: (Word (Host a) ~ Word (Mask a)) => a -> a subnet a = let m = mask a h = host a in makeIPAddr (fromBits $ (bits h) .&. (bits m)) $ m
Note that I didn't put a IPAddr context since in your code subnet is a method of this class (with a default implementation), if this wasn't your intention you should correct the indentation. -- Jedaï