!t,      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Koen Claessen 2003GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HMI  !"#$%&'()*+,-./0123456789:;<=  !"#$%&'()*+,-./0123456789:;<=  !"#$+/-.,%&'(*)0123465789:;<D  !"#$%&'()*+,-./0123456789:;<Peter Ljunglof 2002GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM=>?@ABCDEFGHIJ     =>?@ABCDEFGHIJ>?@ABCDEFGHIJ= => ?@ABCDEFGHIJ     Peter Ljunglof 2002GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HMKLMNOPQRSTUVWXYZ[\]^_`abcdefghKLMNOPQRSTUVWXYZ[\]^_`abcdef^_`Z[\]WXYSTUVOPQRhgMNKLabcdefKLMNOPQRSTUVWXYZ[\]^_`abcdefghXY\dPeter Ljunglof 2002GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM ijijij ijPeter Ljunglof 2002GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM k kkk Peter Ljunglof 2002GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM!"#l$mnopqrstuvwxy%&'()*+lmnopqrstuvwxymnopqrstuvwlxy !#"l$m nopqrstuvwxy%&'()*+Otakar Smrz 2005-2011GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HMz{|}~,-./-KLMNOPQRSTUVWXYZ[\]^_`abcdefz{|}~{|z}~z{|}~,-./Peter Ljunglof 2002GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM 0123456710234567 Peter Ljunglof 2002GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM89:;<=89:;<= Peter Ljunglof 2002GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM >?@ABCDEFGHI @?>ABCDEFGHI Peter Ljunglof 2002GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM JKLMNOPQ JKLMNOPQ Peter Ljunglof 2002GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HMRSTUVWXYZ[\]^_ TSRUVWXYZ[\]^_Peter Ljunglof 2002GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HMPeter Ljunglof 2002GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM Otakar Smrz 2005-2011GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM`abcdefghij.KLMNOPQRSTUVWXYZ[\]^_`abcdef`abcdefghijOtakar Smrz 2005-2011GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM7klmnopqrstuvwxyz{|}~7KLMNOPQRSTUVWXYZ[\]^_`abcdef1klmnpoqsrtuvwxyz{|}~tOtakar Smrz 2005-2014GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM Otakar Smrz 2005-2014GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM7Encodings are represented as distinct datatypes of the / class, which defines two essential methods: 0turning a list of 'internal code points' into a String, and/converting the lists in the opposite direction.ZDeveloping a new encoding means to write a new module with a structure similar to this:  module  MyEncModule ( MyEncType (..)) where   import Encode   data  MyEncType = ,MyEncName | MyEncAlias deriving (Enum, Show)   instance   MyEncType where    enc data =  show data -- your choices ...    enc data = map (toEnum . fromEnum) data Encode.Unicode.UTF8P is one concrete implementation that realizes and illustrates this template. Encode.Arabic.Buckwalter9 implements symmetric recoding using finite maps, and Encode.Arabic.ArabTeX) makes use of monadic parsing and the PureFP library.The 5 type denotes the code space, and it is a synonym to .jThe datatype introduced for the internal representation of Unicode code points is currently defined as newtype  = UPoint CSpace. The shift to code points UPoint from characters Char is intentional, as Unicode support in Haskell is not yet fully implemented, and code points are, anyway, different entities. Since the  type is an instance of the EnumL class, the type's constructor and destructor functions are available as  and , respectively.The  datatype should be the transfer point on the way from one encoding into another. It should not be the terminal stop, though. The / method should be used systematically, and not showD, even if it might temporarily produce somehow appealing results.Otakar Smrz 2005-2014GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM\OOtakar Smrz 2005-2014GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HMK      !"#$%&'()*+,-./0?      !"#$%&'()*+,-./0Otakar Smrz 2005-2011GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM 12345671234567Otakar Smrz 2005-2012GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM 89:;<=>89:;<=>Otakar Smrz 2005-2012GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM ?@ABCDE?@ABCDEOtakar Smrz 2005-2011GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM*FGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVWXYZOtakar Smrz 2005-2011GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM[\]^_[\]^_Otakar Smrz 2005-2011GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM` `Otakar Smrz 2005-2014GPLotakar-smrz users.sf.net provisionalportable Safe-Inferred23468:HM3a !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy Mz{|}~D:/.            : / . !o Y       ! " # $ % & '    ( ) * + , - . / ( ) 0 1 2 3 4 5 6    7 8 9 : ; < = > ? @ A ( ) B C D E F G H IJKLMNOPQRSTUV()WXYZ[\]^_`abcdbcdbcebcfbcgbchijkblmblnopqrstuuvwxyz{|}~d2qrstuuvwxy{|}~d Encode-1.3.7Parsek PureFP.OrdSetPureFP.Parsers.ParserPureFP.Parsers.StandardPureFP.Parsers.Stream PureFP.OrdMap Encode.ExPlusPureFP.Parsers.TriePureFP.Parsers.AmbTriePureFP.Parsers.ExTriePureFP.Parsers.AmbExTriePureFP.Parsers.PairTrie Encode.Extend Encode.MapperEncode.VersionEncodeEncode.Arabic.ArabTeXEncode.Arabic.ArabTeX.ZDMGEncode.Arabic.BuckwalterEncode.Arabic.ParkinsonEncode.Arabic.HabashEncode.Arabic.ByteEncode.Unicode.UTF8Encode.UnicodePureFP.ParsersPureFP Encode.Arabic ParseResult ParseMethodUnexpectExpectParser anySymbolsatisfylabellooksucceedsstringcharnoneOfoneOfspacesspacenewlinetabupperloweralphaNumletterdigithexDigitoctDigitanyCharmunchmunch1pzero<|><<|>trychoiceoptionoptionalbetween skipMany1skipManymany1manysepBysepBy1countchainrchainlchainr1chainl1 parseFromFileparseshortestResult longestResultlongestResultsallResultsStaged allResultscompleteResultsshortestResultWithLeftoverlongestResultWithLeftoverlongestResultsWithLeftoverallResultsWithLeftovercompleteResultsWithLineSetOrdSetemptySetunitSetisEmptyelemSet<++><\\> plusMinusunionmakeSetelemsordSetlimit Lookahead lookahead SymbolContsatCont InputSymbolminSymmaxSymsymbolsSymbolsymsatskipSequence<*>*>Monoidzero<+>anyof parseFullsuccessmany0syms0<:>syms$fInputSymbolInt$fInputSymbolCharStandardStdStreamMapOrdMapemptyMap|-> isEmptyMap? lookupWith mergeWith unionMapWithassocsordMapmapMap makeMapWith mapMapWithKeyExtendExtEnvinitEnv inspectIList returnIList inspectEList returnEList inspectEnvresetEnvagain lookupListoneof'oneof upperWithTrieAmbTrie:&:ExTrie AmbExTrieFMapunfold ParserTriePairTrieExtQuitMapperothers|:||-||.||+|some<-><.>initPWlastPW parseWide unParseWideparseLongestWideparseLongestWideWithinitPDlastPD parseDeep unParseDeepparseLongestDeepparseLongestDeepWith parseLongestparseLongestWithparseLongestCheckparseLongestCheckWith showPrettyrevisedversionEncodingencodedecodeCSpaceUPointArabTeXTeXLagallytokenseventsZDMG ArabTeX_ZDMG BuckwalterTim ParkinsonDilHabashHSBSoudi ISIRI3342ASMO449DOSFarsiCP1006 DOSArabicCP864MacFarsi MacArabic ISOArabic ISO_8859_6 WinArabic Windows_1256CP1256UTF8UTFUnicodeUCSPResultFailLookplusfailSymfailEof$fMonadPlusParser $fMonadParser$fFunctorParserTreeSetNodeNilmakeTreeelemTree $fOrdSetSet $fShowSet$fOrdSet$fEqSet$fLookaheadStandards$fParserStandards$fSymbolContStandards$fSymbolStandards$fSequenceStandard$fFunctorStandard$fMonadStandard$fMonoidStandard$fMonadState[]Standard:::Shift$fParserStreams$fSymbolContStreams$fSymbolStreams$fSequenceStream$fFunctorStream $fMonadStream$fMonoidStreamTreeMap lookupTreemapTreemapTreeWithKey $fOrdMapMap $fShowMap$fEqMap$fParserStateTs$fSymbolStateTs$fSequenceStateT$fMonoidStateT $fParserTries $fSymbolTries$fSequenceTrie $fFunctorTrie $fMonadTrie $fMonoidTrie$fParserAmbTries$fSymbolAmbTries$fSequenceAmbTrie$fFunctorAmbTrie$fMonadAmbTrie$fMonoidAmbTrieparse' parseFull'$fParserExTries$fSymbolExTries$fSequenceExTrie$fFunctorExTrie $fMonadExTrie$fMonoidExTrie$fParserAmbExTries$fSymbolAmbExTries$fSequenceAmbExTrie$fFunctorAmbExTrie$fMonadAmbExTrie$fMonoidAmbExTrieFound makeParser$fParserParserTries$fFunctorParserTrie$fMonoidParserTrie$fParserPairTries$fSymbolPairTries$fSequencePairTrie$fFunctorPairTrie$fMonadPairTrie$fMonoidPairTrieInE$fLookaheadExtends$fParserExtends$fSymbolContExtends$fSymbolExtends$fSequenceExtend$fFunctorExtend $fMonadExtend$fMonoidExtend ParseDeepPD ParseWidePWNextElseOnlyperhaps returnQuitjustQuitskipQuit unfoldWith unfoldTrieparsePW unParsePWparsePD unParsePD$fParserMappers$fSymbolMappers$fSequenceMapper$fFunctorMapper $fMonadMapper$fMonoidMapper $fOrdMapNextbase Data.VersionVersion versionBranch versionTags parseVersion showVersionghc-prim GHC.TypesWordGHC.EnumtoEnumfromEnum $fEnumUPoint $fShowUPointLowerUpMappingEnvironParsingEnvenvQuoteenvModeenvWaslaenvVerbenvEarlyMode FullvocalizeVocalize Novocalize NodiacriticsencodersetQuotesetModesetWaslasetVerbsetEarly vowelControl shaddaControldecoderParsing returnError parseAnything parseNothing parseQuote parseControlprocessControl parseHamzaparseVerbHamzaparseArabHamzaparseInitVowelparseSyllVowelcompleteSyllableparseSingleConsparseDoubleCons parseHyphen parseDefinite parseWhite parsePunct parseDigitpairsquotedecoderMapping defineMappingrulesruleVerbalSilentAlifruleMaqsuuraWithAlifruleGroupControlruleCapsControlruleControlSequenceruleLiWithDefinite ruleDefiniteruleIndefiniteruleMultiVowelruleHyphenedVowelruleInternalTaaaaruleInternalYaaaaunionMapdefine consonantsunnyinvisemptysukunshaddasilentwaslataaaaboundhamzamoonyvowelmultinuunsotherpunctwhite $fExtEnvEnv$fEncodingArabTeXenvCapsetCap consControlhyphenextraminor$fEncodingZDMGrecoderecoderdecoderdecodedencoded$fEncodingBuckwalter$fEncodingParkinson$fEncodingHabash nonUPoint lowerCode upperCode winArabic isoArabic macArabicmacFarsi dosArabicdosFarsiasmo449 isiri3342$fEncodingISIRI3342$fEncodingASMO449$fEncodingDOSFarsi$fEncodingDOSArabic$fEncodingMacFarsi$fEncodingMacArabic$fEncodingISOArabic$fEncodingWinArabic codespaceUTF codespaceUCS doubleByte tripleByte$fEncodingUTF8$fEncodingUnicode