úÎ>R: %      !"#$8The abstract data structure to express an IPv6 address.  To create this, use  . Or use % " 2001:DB8::1" :: , for example. Also, " 2001:DB8::1"0 can be used as literal with OverloadedStrings. &8The abstract data structure to express an IPv4 address.  To create this, use  . Or use % " 192.0.2.1" :: , for example. Also, " 192.0.2.1"0 can be used as literal with OverloadedStrings. '()A unified IP data for  and . 4 To create this, use the data constructors. Or use %  192.0.2.1 :: , for example. Also,  192.0.2.10 can be used as literal with OverloadedStrings. *+The  function takes a list of , and returns .  For example,   [192,0,2,1]. The  function takes a list of , and returns .  For example,  [0x2001,0xDB8,0,0,0,0,0,1]. The   function convert  to a list of ,. The  function convert  to a list of ,. -./01234&'()*+ -./01234&&''()*+ -./01234567895678956789 :The Addr range consists of an address, a contiguous mask, ; and mask length. The contiguous mask and the mask length 9 are essentially same information but contained for pre  calculation. To create this, use  makeAddrRange or % " 192.0.2.0/24" ::   .  Also, " 192.0.2.0/24"0 can be used as literal with OverloadedStrings. : The  " function returns an address from  . The   function returns a contiguous  mask from  . The % function returns a mask length from  . A unified data for    and   .  To create this, use % " 192.0.2.0/24" :: .  Also, " 192.0.2.0/24"0 can be used as literal with OverloadedStrings. ;<=>?@A : ;<=>?@A : : ;<=>?@AThe  function takes an  and a contiguous ! mask and returned a masked . The  function takes , and returns a contiguous  mask. The >:> operator takes two   . It returns B if  the first   contains the second   . Otherwise,  it returns C. The  toMatchedTo function take an  address and an  ,  and returns B$ if the range contains the address. The  functions takes an  address and a mask ? length. It creates a bit mask from the mask length and masks  the  address, then returns   made of them. ;The Tree structure for IP routing table based on TRIE with C one way branching removed. This is an abstracted data structure, - so you cannot touch its inside. Please use  or ! , instead. DE"A class to contain IPv4 and IPv6. The  function takes , and returns an  address " whose only n-th bit is set. The  function takes an  address and an test bit   address and returns B is the bit is unset,  otherwise returns C. FGHIJThe - function returns an empty IP routing table. The ( function inserts a value with a key of   to   and returns a new . KLMN The  & function deletes a value by a key of   from   and returns a new . O!The ! function looks up  with a key of  .  If a routing information in  matches the key, its value  is returned. P"The " function looks up  with a key of  . - If the key matches routing informations in  , they are  returned. #The #. function creates a new IP routing table from  a list of a pair of IPrange and value. $The $& function creates a list of a pair of   and " value from an IP routing table. QDEFGHIJKLMN O!P"#$QEDDEFGHIJKLMN O!P"#$Q  !"#$  !"#$    R       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ45K45LMNOPQRSTUVWXYZ[ iproute-1.2.4Data.IPData.IP.RouteTable Data.IP.Addr Data.IP.Mask Data.IP.Range Data.IP.OpData.IP.RouteTable.InternalIPv6IPv4IPipv6ipv4toIPv4toIPv6fromIPv4fromIPv6 AddrRangeaddrmaskmlenIPRange IPv6Range ipv6range IPv4Range ipv4rangeAddrmasked intToMask>:> isMatchedTo makeAddrRangeIPRTableRoutable intToTBitisZeroemptyinsertdeletelookup findMatchfromListtoListbase Text.ReadreadIP6IP4IPv6AddrIPv4AddrshowIPv4showIPv6ghc-prim GHC.TypesIntparseIP parseIPv4 parseIPv6digip4hexip6ip6'maskIPv4maskIPv6 masksWord32 masksIPv4 masksIPv6 parseIPRangeparseIPv4RangeparseIPv6Rangeip4range maskedIPv4ip6range maskedIPv6TrueFalseNodeNil intToTBitIPv4 intToTBitIPv6intToTBitsWord32intToTBitsIPv4intToTBitsIPv6joinglue keyToTestBitisLeftnodesearchfoldt