module Hans.Address where
import Data.Serialize (Serialize)
import Data.Word (Word8)
class (Ord a, Serialize a) => Address a where
addrSize :: a -> Word8
toBits :: a -> [Bool]
class Address addr => Mask mask addr | addr -> mask, mask -> addr where
masksAddress :: mask -> addr -> Bool
withMask :: addr -> Int -> mask
getMaskComponents :: mask -> (addr,Int)
getMaskRange :: mask -> (addr,addr)
broadcastAddress :: mask -> addr
isBroadcast :: (Eq addr, Mask mask addr) => mask -> addr -> Bool
isBroadcast m a = broadcastAddress m == a