6      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ NoneThis 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..A 128-bit Internet Protocol version 6 address. Create an  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 B address, but it should be readable enough for hacking in GHCi.Alet ip = fromWord16s 0x3124 0x0 0x0 0xDEAD 0xCAFE 0xFF 0xFE00 0x1ipCfromWord16s 0x3124 0x0000 0x0000 0xdead 0xcafe 0x00ff 0xfe00 0x0001T.putStrLn (encode ip)3124::dead:cafe:ff:fe00:1 `Encodes the IP, using zero-compression on the leftmost-longest string of zeroes in the address.$     None 5<=DIR -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 ip = fromOctets 192 168 1 1ipfromOctets 192 168 1 1 getIPv4 ip 3232235777 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.255Checks 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)$(This exists mostly for testing purposes.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.A !"#$%&'()*+,-./0123 !"#$%&'()* !"#$%&'()*= !"#$%&'()*+,-./0123None 5<=DIR >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.BChecks 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 B 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.C5This is provided to mirror the interface provided by Data.Set. It behaves just like B but with flipped arguments.member ip r == contains r ipD The inclusive lower bound of an >\. This is conventionally understood to be the broadcast address of a subnet. For example:@I.print $ lowerInclusive $ IPv4Range (fromOctets 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)F Convert an > into a list of the  addresses that are in it. >>> let r = IPv4Range (fromOctets 192 168 1 8) 30 >>> mapM_ I.print (toList r) 192.168.1.8 192.168.1.9 192.168.1.10 192.168.1.11H'The RFC1918 24-bit block. Subnet mask:  10.0.0.0/8I'The RFC1918 20-bit block. Subnet mask:  172.16.0.0/12J'The RFC1918 16-bit block. Subnet mask: 192.168.0.0/16K 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 K is idempotent, that is:(normalize r == (normalize . normalize) rP(This exists mostly for testing purposes.$>?@ABCDEFGHIJKLMNOPQRSTUV>?@ABCDEFGHIJKLMNOPKBCDEFGHIJLMNOP>?@A>?@ABCDEFGHIJKLMNOPQRSTUVNone\ A 32-bit  address or a 128-bit 8 address. Internally, this is just represented as an ' 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.`If the address is an  address, return the address.aIf the address is an N address, and if it is not an IPv4-mapped IPv6 address, return the address.\]^_`abcdefghi \]^_`abcde _`abcde\]^ \]^_`abcdefghisee src/Data/LICENSE experimentalnon-portable (GHC Extensions)NoneB12-bit unsigned integer type!narrowings represented as primop  in GHC.count leading zeroscount trailing zerosthe number of set bitsNoneThis 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.  None%&OTCharacters 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.           NoneOT\ ,A character in the basic multilingual plane.  (Default, used when index is out of rangeTexts to index into    None%&OT Taken from Data.ByteString.Internal". The same warnings apply here. !"#$%&'()*+,  !$%)* !"#$%&'()*+,None -5<=DIRT l3The 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.mTwo-character groups, FA:2B:40:09:8C:11nThree-character groups, 24B-F0A-025-829oFour-character groups, A220.0745.CAC7pNo separator,  24AF4B5B0780uA 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.]Lenient decoding of MAC address that accepts lowercase, uppercase, and any kind separator.!Make a bytestring builder from a u+ address using a colon as the separator. Parser for a u6 address using with a colon as the separator (i.e. FA:43:B2:C0:0F:99). Parser for a u% 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.Olmnopqrstuvw01234567xy89z{|}~:;<=>?@ABCDEFGHIJKLMN.O/PQRSTUVWXlpmnoqrstuvwxyz{|}~xyz{~}|uvwqrstlmnop@lmnopqrstuvw01234567xy89z{|}~:;<=>?@ABCDEFGHIJKLMN.O/PQRSTUVWX None>?@A\]^lpmnoqrstuvw\]^>?@AuvwqrstlmnopY    !"#$%&'()*+,-./0123456789:;<=>?@ABBCDEFGHIJKLMN&(OPQRSTUVWXYZZ[\]^_`abcdefghijkllmnoop!qrst&u)*v+,wxyz{|}~                     !"#$%&'()*+,-./ip-1.0.0-BvwF1jq0xxp8gUnemprXVKNet.IPv6Net.IPv4Net.IPv4.RangeNet.IPNet.MacData.Word.Synthetic.Word12!Data.Text.Builder.Common.InternalData.Text.Builder.FixedData.Text.Builder.VariableData.ByteString.Builder.Fixed Net.TypesIPv6ipv6Aipv6B fromOctets fromWord16s toWord16sloopbackanyencodedecodeparser$fFromJSONIPv6 $fToJSONIPv6 $fReadIPv6 $fShowIPv6$fEqIPv6 $fOrdIPv6$fShowS$fReadSIPv4getIPv4toOctets broadcastprivatereservedpublicbuilderreaderprint 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 ipv4RangeBaseipv4RangeLengthcontainsmemberlowerInclusiveupperInclusivetoList toGenerator private24 private20 private16 normalize$fVectorVectorIPv4Range$fMVectorMVectorIPv4Range$fUnboxIPv4Range$fFromJSONIPv4Range$fToJSONIPv4Range$fHashableIPv4Range $fEqIPv4Range$fOrdIPv4Range$fShowIPv4Range$fReadIPv4Range$fGenericIPv4RangeIPgetIPcase_ipv4ipv6fromIPv4fromIPv6 $fFromJSONIP $fToJSONIP$fReadIP$fShowIP$fEqIP$fOrdIP MacGroupingMacGroupingPairsMacGroupingTriplesMacGroupingQuadruplesMacGroupingNoSeparatorMacCodecmacCodecGroupingmacCodecUpperCaseMacgetMac encodeWithdecodeEitherWith decodeEither decodeWith parserWithdecodeWithUtf8parserWithUtf8parserLenientUtf8encodeWithUtf8 $fFromJSONMac$fFromJSONKeyMac$fToJSONKeyMac $fToJSONMac $fHashableMac$fEqMac$fOrdMac $fShowMac $fReadMac $fGenericMac$fEqMacGrouping$fOrdMacGrouping$fShowMacGrouping$fReadMacGrouping$fGenericMacGrouping $fEqMacCodec $fOrdMacCodec$fShowMacCodec$fReadMacCodec$fGenericMacCodecSbaseGHC.ShowShowResResWordResColonResDone _sDoubleColon_sTotal _sRevWords showHexWord16 nibbleToHex rightToMaybetoIPv6times16 alreadySet restrictTo16 fromOctetsV6 fromWord16sV6fromOctetsWord64fromWord16Word64GHC.ReadRead fromOctets'dotDecimalParsertoTextPreAllocatedV_IPv4MV_IPv4mask4mask8mask10mask12mask15mask16mask24mask32toBSPreAllocated aesonParserdecodeIPv4TextMaybedecodeIPv4TextReader stripDecimalp24p20p16ipOctetSizeErrorMsgtoDotDecimalTexttoDotDecimalBuildertoTextPreallocatedPartTwo twoDigits threeDigitsi2wzero putAndCountD:R:VectorIPv40D:R:MVectorsIPv40 V_IPv4Range MV_IPv4Rangemask countAddrswordSuccessorswordSuccessorsMrangeToDotDecimalTextrangeToDotDecimalBuilderD:R:VectorIPv4Range0D:R:MVectorsIPv4Range0Word12 narrow12Word#ghc-primGHC.Primand#clz12#ctz12# popCnt12#W12# word12Type$fFiniteBitsWord12 $fBitsWord12 $fReadWord12 $fIxWord12$fBoundedWord12$fIntegralWord12 $fEnumWord12 $fRealWord12 $fNumWord12 $fShowWord12 $fDataWord12portableTextArrayportableTextLengthportableUntext writeString charUtf16SizehexValuesWord12UpperhexValuesWord12LowerhexValuesWord8UpperhexValuesWord8LowertwoDecimalDigitsthreeDecimalDigitscharBmpBuilder BuilderStaticBuilderFunctionfromTextcontramapBuilderrunword8HexFixedUpperword8HexFixedLowerword8HexFixedGeneralword12HexFixedGeneralword12HexFixedUpperword12HexFixedLower$fMonoidBuilder contramap staticCharBmpword8vector asciiZeroc2wfromByteStringchar8word8AtGHC.WordWord8parseOneHexLenientUtf8tryParseWord8HexPairUtf8 pairSepUtf8 pairMacUtf8PairpairSeppairMacdefCodecparserQuadruples parserPairs parserTriplesparserNoSeparator parseTwoHextryParseCharHex parseOneHex parseCharHexfixedBuilderTriplesfixedBuilderNoSeparatorfixedBuilderQuadruplesfixedBuilderPairsword12AtdecodeLenientUtf8parserNoSeparatorUtf8parserPairsUtf8parserTriplesUtf8parserQuadruplesUtf8parseOneHexUtf8parseTwoHexUtf8 parseWord8HexfixedBuilderTriplesUtf8fixedBuilderQuadruplesUtf8fixedBuilderPairsUtf8fixedBuilderNoSeparatorUtf8 word8AtUtf8 word12AtUtf8attoparsecParseJSONunsafeWord48FromOctets