h      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ None %This is slower that just pattern matching on the Text data constructor. However, it will work with GHCJS. This should only be used in places where we know that it will only be evaluated once.kThis length is not the character length. It is the length of Word16s required by a UTF16 representation. NoneQV^k,A character in the basic multilingual plane.(Default, used when index is out of rangeTexts to index intosee src/Data/LICENSE experimentalnon-portable (GHC Extensions)NoneD12-bit unsigned integer type!narrowings represented as primop  in GHC.count leading zeroscount trailing zerosthe number of set bits None&'QVCharacters outside the basic multilingual plane are not handled correctly by this function. They will not cause a program to crash; instead, the character will have the upper bits masked out.  None&'QV Taken from Data.ByteString.Internal". The same warnings apply here. None 6>?FKT8-A 32-bit Internet Protocol version 4 address. Create an  address from four octets. The first argument is the most significant octet. The last argument is the least significant. Since IP addresses are commonly written using dot-decimal notation, this is the recommended way to create an IP address. Additionally, it is used for the  and  instances of & to help keep things readable in GHCi.let addr = ipv4 192 168 1 1addripv4 192 168 1 1 getIPv4 addr 3232235777An alias for the  smart constructor. Convert an  address into a quadruple of octets. The first element in the quadruple is the most significant octet. The last element is the least significant octet.&The IP address representing any host: 0.0.0.0The loopback IP address:  127.0.0.1The broadcast IP address: 255.255.255.255 Checks to see if the Y address belongs to a private network. The three private networks that are checked are  10.0.0.0/8,  172.16.0.0/12, and 192.168.0.0/16. Checks to see if the W address belongs to a reserved network. This includes the three private networks that  S checks along with several other ranges that are not used on the public Internet. Checks to see if the  address is publicly routable.public x == not (reserved x)  Encode an  address to  using dot-decimal notation:'T.putStrLn (encode (ipv4 192 168 2 47)) 192.168.2.47  Decode an  address. Encode an  address to a text . Encode an  address to a UTF-8 encoded .This is sort of a misnomer. It takes Word to make dotDecimalParser perform better. This is mostly for internal use. The arguments must all fit in a Word8.^This does not do an endOfInput check because it is reused in the range parser implementation.I think that this function can be improved. Right now, it always allocates enough space for a fifteen-character text rendering of an IP address. I think that it should be possible to do more of the math upfront and allocate less space.  None 6>?FKTd| *The length should be between 0 and 32. These bounds are inclusive. This expectation is not in any way enforced by this library because it does not cause errors. A mask length greater than 32 will be treated as if it were 32..Smart constructor for *I. Ensures the mask is appropriately sized and sets masked bits in the  to zero./Checks to see if an  address belongs in the *.let ip = fromOctets 10 10 1 92/contains (IPv4Range (fromOctets 10 0 0 0) 8) ipTrue1contains (IPv4Range (fromOctets 10 11 0 0) 16) ipFalse/Typically, element-testing functions are written to take the element as the first argument and the set as the second argument. This is intentionally written the other way for better performance when iterating over a collection. For example, you might test elements in a list for membership like this:,let r = IPv4Range (fromOctets 10 10 10 6) 31LmapM_ (P.print . contains r) (take 5 $ iterate succ $ fromOctets 10 10 10 5)FalseTrueTrueFalseFalseThe implementation of / ensures that (with GHC), the bitmask creation and range normalization only occur once in the above example. They are reused as the list is iterated.05This is provided to mirror the interface provided by Data.Set. It behaves just like / but with flipped arguments.member ip r == contains r ip1 The inclusive lower bound of an *\. This is conventionally understood to be the broadcast address of a subnet. For example:HT.putStrLn $ I.encode $ lowerInclusive $ IPv4Range (ipv4 10 10 1 160) 25 10.10.1.128*Note that the lower bound of a normalized *( is simply the ip address of the range:/lowerInclusive r == ipv4RangeBase (normalize r)3 Convert an * into a list of the  addresses that are in it. >>> let r = IPv4Range (fromOctets 192 168 1 8) 30 >>> mapM_ (T.putStrLn . I.encode) (toList r) 192.168.1.8 192.168.1.9 192.168.1.10 192.168.1.115'The RFC1918 24-bit block. Subnet mask:  10.0.0.0/86'The RFC1918 20-bit block. Subnet mask:  172.16.0.0/127'The RFC1918 16-bit block. Subnet mask: 192.168.0.0/168 Normalize an *(. The first result of this is that the  inside the *H is changed so that the insignificant bits are zeroed out. For example::print $ normalize $ IPv4Range (fromOctets 192 168 1 19) 24192.168.1.0/24;print $ normalize $ IPv4Range (fromOctets 192 168 1 163) 28192.168.1.160/28`The second effect of this is that the mask length is lowered to be 32 or smaller. Working with *s that have not been normalized does not cause any issues for this library, although other applications may reject such ranges (especially those with a mask length above 32). Note that 8 is idempotent, that is:(normalize r == (normalize . normalize) r=(This exists mostly for testing purposes.*+,-./0123456789:;<=.8/012345679:;<=*+,-*+,-Nonet2This is an internal data type used as the result after parsing an ipv6 address. The first field indicates the index at which a double colon occurs. The second is the length of the third. The third is a reversed list of the 16s that comprise the ipv6 address.I.A 128-bit Internet Protocol version 6 address.N Create an I address from the eight 16-bit fragments that make it up. This closely resembles the standard IPv6 notation, so is used for the T instance. Note that this lacks the formatting feature for suppress zeroes in an IB address, but it should be readable enough for hacking in GHCi.<let addr = ipv6 0x3124 0x0 0x0 0xDEAD 0xCAFE 0xFF 0xFE00 0x1addr<ipv6 0x3124 0x0000 0x0000 0xdead 0xcafe 0x00ff 0xfe00 0x0001T.putStrLn (encode addr)3124::dead:cafe:ff:fe00:1OAn alias for the N smart constructor.S`Encodes the IP, using zero-compression on the leftmost-longest string of zeroes in the address. IJKLMNOPQRSTU IJKLNMOPRQSTUIJKLNone|^ A 32-bit  address or a 128-bit I8 address. Internally, this is just represented as an I' address. The functions provided in Net.IP help simulate constructing and pattern matching on values of this type. All functions and typeclass methods that convert ^& values to text will display it as an  address if possible.b Construct an ^4 address from the four octets of an IPv4 address.c Construct an ^< address from the eight 16-bit chunks of an IPv6 address. ^_`abcdefg abcdefg^_`^_`None.6>?FKTV)n3The format expected by the mac address parser. The  taken by some of these constructors is the ascii value of the character to be used as the separator. This is typically a colon, a hyphen, or a space character. All decoding functions are case insensitive.oTwo-character groups, FA:2B:40:09:8C:11pThree-character groups, 24B-F0A-025-829qFour-character groups, A220.0745.CAC7rNo separator,  24AF4B5B0780wA 48-bit MAC address. Do not use the data constructor for this type. It is not considered part of the stable API, and it allows you to construct invalid MAC addresses.y Construct a w address from a %. Only the lower 48 bits are used.z Create a w address from six octets.{ Convert a wA address to the six octets that make it up. This function and z are inverses:?m == (let (a,b,c,d,e,f) = toOctets m in fromOctets a b c d e f)| Decode a w address from a 1. Each byte is interpreted as an octet of the w address. Consequently, 4s of length 6 successfully decode, and all other s fail to decode.4decodeBytes (B.pack [0x6B,0x47,0x18,0x90,0x55,0xC3])Just (mac 0x6b47189055c3) decodeBytes (B.replicate 6 0x3A)Just (mac 0x3a3a3a3a3a3a) decodeBytes (B.replicate 7 0x3A)Nothing} Encode a wH address lowercase hex, separating every two characters with a colon:(T.putStrLn (encode (Mac 0xA47F247AB423))a4:7f:24:7a:b4:23 Encode a wB address, as lowercase hexadecimal digits separated by a colon:-BC.putStrLn (encodeUtf8 (mac 0x64255A0F2C47))64:25:5a:0f:2c:47]Lenient decoding of MAC address that accepts lowercase, uppercase, and any kind separator.decodeUtf8 "A2:DE:AD:BE:EF:67"Just (mac 0xa2deadbeef67)decodeUtf8 "13-a2-fe-a4-17-96"Just (mac 0x13a2fea41796)decodeUtf8 "0A42.47BA.67C2"Just (mac 0x0a4247ba67c2)!Make a bytestring builder from a w+ address using a colon as the separator.Lenient parser for a w[ address using any character as the separator and accepting any digit grouping (i.e. FA:43:B2:C0:0F:99 or A065.647B.87FA). Parser for a w% address using the provided settings.YParse a single hexidecimal character. This will skip at most one character to do this.Kind of a confusing type signature. The Word8 that stands alone represented an ascii-encoded value. The others actually describes the numbers that would be decoded from this value.nropqstuvwxyz{|}~yz{}~|wxstuvnopqrnopqrstuvwx None*+,-IJKL^_`nropqstuvwxIJKL^_`*+,-wxstuvnopqr    !"#$%&'()*+,-./01234556789:;<=>?@ABCDEFGHIJKLMNOOPQRSTUVWXYZ[\]]^_R`abcdefghijklmmnoppqrstuvwxyz{|}~      ip-1.1.1-7YTTdXyLNoM1qrMeQw6EF3Net.IPv4Net.IPv4.RangeNet.IPv6Net.IPNet.Mac!Data.Text.Builder.Common.InternalData.Text.Builder.VariableData.Word.Synthetic.Word12Data.Text.Builder.FixedData.ByteString.Builder.Fixed Net.TypesIPv4getIPv4ipv4 fromOctetstoOctetsanyloopback broadcastprivatereservedpublicencodedecodebuilderreaderparser encodeUtf8 decodeUtf8 builderUtf8 parserUtf8 encodeString decodeString$fFromJSONKeyIPv4$fToJSONKeyIPv4$fFromJSONIPv4 $fToJSONIPv4$fVectorVectorIPv4$fMVectorMVectorIPv4 $fUnboxIPv4 $fReadIPv4 $fShowIPv4$fEqIPv4 $fOrdIPv4 $fEnumIPv4 $fBoundedIPv4$fHashableIPv4 $fGenericIPv4 $fPrimIPv4 $fBitsIPv4$fFiniteBitsIPv4$fStorableIPv4 IPv4Range ipv4RangeBaseipv4RangeLengthrangecontainsmemberlowerInclusiveupperInclusivetoList toGenerator private24 private20 private16 normalizeprint$fVectorVectorIPv4Range$fMVectorMVectorIPv4Range$fUnboxIPv4Range$fFromJSONIPv4Range$fToJSONIPv4Range$fHashableIPv4Range $fEqIPv4Range$fOrdIPv4Range$fShowIPv4Range$fReadIPv4Range$fGenericIPv4RangeIPv6ipv6Aipv6Bipv6 fromWord16s toWord16s$fFromJSONIPv6 $fToJSONIPv6 $fReadIPv6 $fShowIPv6$fEqIPv6 $fOrdIPv6$fShowS$fReadSIPgetIPcase_fromIPv4fromIPv6 $fFromJSONIP $fToJSONIP$fReadIP$fShowIP$fEqIP$fOrdIP MacGroupingMacGroupingPairsMacGroupingTriplesMacGroupingQuadruplesMacGroupingNoSeparatorMacCodecmacCodecGroupingmacCodecUpperCaseMacmac decodeBytes encodeWith decodeWith parserWithdecodeWithUtf8parserWithUtf8encodeWithUtf8 $fFromJSONMac$fFromJSONKeyMac$fToJSONKeyMac $fToJSONMac $fHashableMac $fReadMac $fShowMac$fEqMac$fOrdMac $fGenericMac$fEqMacGrouping$fOrdMacGrouping$fShowMacGrouping$fReadMacGrouping$fGenericMacGrouping $fEqMacCodec $fOrdMacCodec$fShowMacCodec$fReadMacCodec$fGenericMacCodecportableTextArrayportableTextLengthportableUntext writeString charUtf16SizehexValuesWord12UpperhexValuesWord12LowerhexValuesWord8UpperhexValuesWord8LowertwoDecimalDigitsthreeDecimalDigitscharBmpvectorBuilderrun contramap staticCharBmpword8Word12 narrow12Word#ghc-primGHC.Primand#clz12#ctz12# popCnt12#W12#fromTextcontramapBuilderword8HexFixedUpperword8HexFixedLowerword12HexFixedUpperword12HexFixedLower BuilderStaticBuilderFunctionc2wfromByteStringchar8baseGHC.ShowShowGHC.ReadRead#text-1.2.2.2-EakMpasry3jA6OIwSZhq9MData.Text.InternalTextData.Text.Internal.Builderbytestring-0.10.8.2Data.ByteString.Internal ByteString fromOctets'dotDecimalParsertoTextPreAllocatedD:R:VectorIPv40V_IPv4D:R:MVectorsIPv40MV_IPv4D:R:VectorIPv4Range0 V_IPv4RangeD:R:MVectorsIPv4Range0 MV_IPv4RangeSResResWordResColonResDone _sDoubleColon_sTotal _sRevWordsGHC.WordWord8Word64parseOneHexLenientUtf8tryParseWord8HexPairUtf8 pairSepUtf8 pairMacUtf8PairpairSeppairMac