v      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None%&*+,9:;<=DOQRT.FClass for all things that can be converted to memorable strings. See B for how to use.4Render numbers as hexadecimal numbers. Pads with 0s.0Render numbers as decimal numbers. Does not pad.*Class for capturing how to render numbers. 6The class that implements the main rendering function.:Determines the number of bits that a pattern will consume.2Useful to prevent haddock from expanding the type.2Useful to prevent haddock from expanding the type. Convert a  '[Symbol] to a balanced tree of #. Each result has equal probability of occurring. Length of the list must be a power of two. This is very useful for converting long lists of words into a usable pattern.#:kind! ToTree '["a", "b", "c", "d"]!ToTree '["a", "b", "c", "d"] :: *= ("a" :| "b") :| ("c" :| "d")Pad the a argument out to length n7 by taking the remaining bits and converting them via nt (see  and 6). If padding is required, it is separated by a dash.See - and . for convinence functions.  Captures n- bits and convertes them to a string via the nt8 ("number type") argument after adding the offset. See , .! Captures n, bits and converts them to a string via the nt ("number type") argument. See , ."LAppend two patterns together by doing the first, then the second. See also %#JChoice between two sub patterns. It's not safe to use this directly. Use $ instead.Also, if you are parsing back rendered phrases, you must make sure that the selected word is enough to choose a side. That is, a and b must have unique first words. This is NOT checked, as it causes a HUGE compile-time performance hit. If we can make it performant it may be checked one day.$Proxy version of #. It also constraints the two subpatterns to being the same depth. Use this to add an extra bit to the pattern depth, where the bit chooses to proceed down either the left or right side.:set -XTypeApplications:set -XDataKindsimport Data.Word5let myPattern = padHex (Proxy @"foo" .| Proxy @"bar"))renderMemorable myPattern (0x00 :: Word8)"bar-00")renderMemorable myPattern (0xff :: Word8)"foo-7f" See also FWARNING: Each side of the split must be unique. See the warning about #.%Proxy version of ". The new pattern depth is the sum of the two parts. >>> import Data.Word >>> import Data.Memorable.Theme.Words >>> let myPattern = words8 .- words8 >>> renderMemorable myPattern (0xabcd :: Word16) "ages-old"&=Shrink a branching pattern by discarding the right hand side.'<Shrink a branching pattern by discarding the left hand side.(,Get the depth of a pattern as a value-level @. >>> :set -XTypeApplications -XDataKinds >>> getDepth (Proxy "foo" .| Proxy  "bar") 1)3Put five things next to each other. Same as using % repeatedly*#Put four things next to each other.+$Put three things next to each other.,"Put two things next to each other.-Pad this pattern out with hex digits. Useful when you want some human readability, but also want full coverage of the data. See  for details.import Data.Word#import Data.Memorable.Theme.FantasyBrenderMemorable (padHex rpgWeapons) (0xdeadbeef01020304 :: Word64)+"sacred-club-of-ghoul-charming-eef01020304"CThe depth to pad to is the first type-level argument. If you have TypeApplications8 set, you can use it like `padHex @256` to be explicit..Pad with decimal digits. See - and ) for details. This does not pad with 0's/8A single hex number consuming 4 bits (with leading 0's).08A single hex number consuming 8 bits (with leading 0's).19A single hex number consuming 16 bits (with leading 0's).29A single hex number consuming 32 bits (with leading 0's).3A single hex number consuming nP bits, which it will try and figure out from context (with leading 0's). Using TypeApplications> allows you to specify the size directly, `hex @32 == hex32`.49A single decimal number consuming 4 bits (no leading 0's)59A single decimal number consuming 8 bits (no leading 0's)6:A single decimal number consuming 16 bits (no leading 0's)7:A single decimal number consuming 32 bits (no leading 0's)8"A single decimal number consuming nN bits, which it will try and figure out from context (no leading 0's). Using TypeApplications> allows you to specify the size directly, `dec @32 == hex32`.=$Turn a memorable string back into a  value.>=Convert a memorable string into a different memorable string.WUseful for things like taking an existing md5, and converting it into a memorable one.#:set -XTypeApplications -XDataKinds!import Data.Memorable.Theme.WordsLrerender hex (padHex @128 $ four words10) "2d4fbe4d5db8748c931b85c551d03360"1Just "lurk-lash-atop-hole-b8748c931b85c551d03360"@iUse this with tasty-quickcheck (or your prefered testing framework) to make sure you aren't lying about . >testProperty "MemLen Word8" $ forAll (arbitrary :: Gen Word8) @ BXThis is the function to use when you want to turn your values into a memorable strings.import Data.Word!import Data.Memorable.Theme.Words let myPattern = words8 .- words8,renderMemorable myPattern (0x0123 :: Word16) "cats-bulk"E Render a  as a more memorable .FGenerate a random string.G Render any  value as a 32 bit pattern.H Render any  value as a 16 bit pattern.I Render any  value as a 8 bit pattern.P:set -XOverloadedStringsimport Data.ByteStringimport Crypto.Hash#let myPattern = padHex (four flw10)JrenderMemorable myPattern (hash ("anExample" :: ByteString) :: Digest MD5),"bark-most-gush-tuft-1b7155ab0dce3ecb4195fc"l=renderMemorable threeWordsFor32Bits (ip4FromOctets 127 0 0 1)"shore-pick-pets"  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~H  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI#"$%! &'()*+,-./012345678 9:;<=> ?@A~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJBCDEFGHI   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None)  !"$%&'()*+,-./012345678=>B)B=>%$,+*)-.3/01284567&'" ! (None+,DQR None+,DQRNone+,DQRNone+,DQRNone +,:DQRTA collection of words$Three words made to fit into 32 bits"Six words made to fit into 64 bits+Four letter words (useful for even lengths)+Four equal length words made to fit 32 bits$Seven equal length words for 64 bits,Eight equal length words made to fit 64 bits''''        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-memorable-bits-0.1.0.0-4N7iSYOijY523QTnChh4xwData.MemorableData.Memorable.InternalData.Memorable.Theme.FantasyData.Memorable.Theme.FoodData.Memorable.Theme.MetricData.Memorable.Theme.ScienceData.Memorable.Theme.Wordsbase Data.ProxyProxy MemorableMemLen renderMem parserMemHexDec NumberRender renderNumber readNumber MemRenderrenderparserNTimesDepthNoDupsHasDupsFindBitsInPowerOfTwo IsPowerOfTwo PowerOfTwo RightSideLeftSide IntersperseConcatToTreeLenToTree64ToTree2ToTreeHPadToNumberWithOffsetNumber:-:|.|.-leftSide rightSidegetDepthfivefourthreetwopadHexpadDechex4hex8hex16hex32hexdec4dec8dec16dec32decaddBits symbolString stringSymbol parsePhraseparseMemorablererender memBitSize testMemLen putUnalignedrenderMemorable runRender runParserrenderMemorableByteString renderRandomrenderHashable32renderHashable16renderHashable8$fMemorableDigest$fMemorableDigest0$fMemorableDigest1$fMemorableDigest2$fMemorableDigest3$fMemorableDigest4$fMemorableDigest5$fMemorableDigest6$fMemorableDigest7$fMemorableDigest8$fMemorableDigest9$fMemorableDigest10$fMemorableDigest11$fMemorableDigest12$fMemorableDigest13$fMemorableDigest14$fMemorableDigest15$fMemorableDigest16$fMemorableDigest17$fMemorableDigest18$fMemorableDigest19$fMemorableDigest20$fMemorableDigest21$fMemorableDigest22$fMemorableDigest23$fMemorableDigest24$fMemorableDigest25$fMemorableDigest26$fMemorableDigest27$fMemorableDigest28$fMemorableDigest29$fMemorableDigest30$fMemorableDigest31$fMemorableIP6$fMemorableIP4$fMemorableInt256$fMemorableInt224$fMemorableInt192$fMemorableInt160$fMemorableInt128$fMemorableInt96$fMemorableWord256$fMemorableWord224$fMemorableWord192$fMemorableWord160$fMemorableWord128$fMemorableWord96$fMemorable(,,,,)$fMemorable(,,,)$fMemorable(,,)$fMemorable(,)$fMemorableInt64$fMemorableInt32$fMemorableInt16$fMemorableInt8$fMemorableWord64$fMemorableWord32$fMemorableWord16$fMemorableWord8$fNumberRenderTYPEHex$fNumberRenderTYPEDec$fMemRenderTYPEPadTo$fMemRenderTYPENumberWithOffset$fMemRenderTYPE:|$fMemRenderTYPE:-$fMemRenderSymbola RpgArmour RpgWeaponsBuffArmourMaterialMonsterAuraArmourWeaponsTransitiveVerb rpgWeapons rpgArmourDessertsFoodAdjectives DessertTypesDessertFlavoursdesserts MeasurementsSIPrefixUnits UnitsPlural measurements ChemBabble ChemSuffix ChemPrefix NumericPrefix chemBabbleFourLetterWordsWordsFLW4FLW5FLW6FLW7FLW8FLW9FLW10Words4Words5Words6Words7Words8Words9Words10Words11Words12words12words11words10words9words8words7words6words5words4threeWordsFor32BitssixWordsFor64Bitsflw10flw9flw8flw7flw6flw5flw4fourEqualWordsFor32BitssevenEqualWordsFor64BitseightEqualWordsFor64Bits integer-gmpGHC.Integer.TypeIntegerbytestring-0.10.8.1Data.ByteString.Lazy.Internal ByteStringGHC.BaseString'hashable-1.2.6.0-EikjbjmXLfl2FtsVIjLwnCData.Hashable.ClassHashable