h*Dm0.3- Safe-Inferred -=^   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  Safe-Inferred -=isomorphism-classBidirectional conversion between two types with no loss of information.The bidirectionality is encoded via a recursive dependency with arguments flipped.You can read the signature IsomorphicTo a b as "B is isomorphic to A".LawsB is isomorphic to A/ if and only if there exists a conversion from B to A () and a conversion from A to B ( ) such that: .  =  - For all values of B converting from B to A and then converting from A to B9 produces a value that is identical to the original. .  =  - For all values of A converting from A to B and then converting from B to A9 produces a value that is identical to the original.Testing=For testing whether your instances conform to these laws use .Instance Definition#For each pair of isomorphic types (A and B) the compiler will require you to define two instances, namely: IsomorphicTo A B and IsomorphicTo B A.isomorphism-class'Convert a value into an isomophic type.isomorphism-class in reverse direction.,Particularly useful in combination with the TypeApplications= extension, where it allows to specify the input type, e.g.: fromText :: IsomorphicTo Text b => Text -> b fromText = from @Text"The first type application of the < function on the other hand specifies the output data type. isomorphism-class#Every type is isomorphic to itself. Safe-Inferred -=  Safe-Inferred -=isomorphism-classVan-Laarhoven-style Isomorphism, compatible with the "lens" library. Safe-Inferred -=Sisomorphism-class=Properties testing whether an instance satisfies the laws of .The instance is identified via the proxy types that you provide.?E.g., here's how you can integrate it into an Hspec test-suite: spec = do describe "IsomorphicTo laws" do traverse_ (uncurry prop) (isomorphicToProperties @Int32 @Word32 Proxy Proxy)  Safe-Inferred -=  Safe-Inferred -=  Safe-Inferred -=  Safe-Inferred -=@  Safe-Inferred -={ Safe-Inferred -= Safe-Inferred -= Safe-Inferred -=, Safe-Inferred -=g Safe-Inferred -= Safe-Inferred -= Safe-Inferred -= Safe-Inferred -=S Safe-Inferred -= Safe-Inferred -= Safe-Inferred -= Safe-Inferred -=? Safe-Inferred -=z Safe-Inferred -= Safe-Inferred -= Safe-Inferred -=+ Safe-Inferred -=f Safe-Inferred -=  Safe-Inferred -=! Safe-Inferred -=" Safe-Inferred -=S# Safe-Inferred -=$ Safe-Inferred -=% Safe-Inferred -=& Safe-Inferred -=@' Safe-Inferred -=|( Safe-Inferred -= ) Safe-Inferred -=* Safe-Inferred -=<+ Safe-Inferred -=x, Safe-Inferred -=- Safe-Inferred -=. Safe-Inferred -=,/ Safe-Inferred -=g Safe-Inferred -= 012345645745849:49;<=>?@A<=B<=C4DE4FG4FG4FH4FI4JK4JL4JM4JN4OP4OQ4OR4OS4OT4OU4OV4OW4OX4OY4OZ4O[4\]4\^4\_4\`4\a4\b4\c4\d4\e4\f4\g4\h4\i4\j4kl4km4kn4ko4kp<=q<=r<=s<=t4uvIsomorphismClass.Relations.LazyTextBuilderAndStrictTextBuilder1IsomorphismClass.Relations.LazyTextBuilderAndText%IsomorphismClass.Relations.ListAndSeq6IsomorphismClass.Relations.ShortByteStringAndWord8List3IsomorphismClass.Relations.StrictTextBuilderAndText!IsomorphismClass.TextCompat.Array0IsomorphismClass.Relations.TextArrayAndWord8List6IsomorphismClass.Relations.ShortByteStringAndTextArray=compare<<=>maxminStringGHC.Prim RealWorldCharWordOrderingLTEQGT GHC.MaybeMaybeJustNothing~ CoercibleGHC.Num.NaturalNaturalTyConData.Semigroup.InternalAnygetAnyGeneric1RatioRational Fractional fromRational/recipReal toRationalEq==/=Monoidmconcatmappendmempty Semigroup<>sconcatstimes Applicative*><*>pureliftA2<*Functorfmap<$Monadreturn>>>>=GHC.IxIxrangeindexinRange rangeSizeGHC.WordWord8GHC.IO.Handle.TypesHandleGHC.ForeignPtr ForeignPtrWord64Word32Word16Data.Bifunctor Bifunctorbimapfirstsecond Data.EitherEitherRightLeftGHC.IO.ExceptionAssertionFailed Data.DataDatagfoldlgunfoldtoConstr dataTypeOf dataCast1 dataCast2gmapTgmapQlgmapQrgmapQgmapQigmapMgmapMpgmapMo GHC.Conc.SyncSTMSumgetSumProduct getProduct MonadPlusmzeromplusForeign.StorableStorablesizeOf alignment peekElemOff pokeElemOff peekByteOff pokeByteOffpeekpokeGHC.IntInt8Int16Int32Int64 GHC.Stable StablePtrGHC.PtrPtrData.SemigroupLastgetLastFirstgetFirstGHC.MVarMVarGHC.Exception.Type Exception toException fromExceptiondisplayException GHC.STRefSTRefGHC.IO.Encoding.Types TextEncodingIOErrorControl.Monad.IO.ClassMonadIOliftIOControl.Concurrent.ChanChan IOException ioe_handleioe_type ioe_locationioe_description ioe_errno ioe_filenameData.Functor.ComposeCompose getComposeBlockedIndefinitelyOnMVar GHC.IsListIsListItemfromListtoList fromListN GHC.FloatFloatingpiexplogsqrt**logBasesincostanasinacosatansinhcoshtanhasinhacoshatanhlog1pexpm1log1pexplog1mexpGHC.NumNum fromInteger-negate+*abssignum RealFloat floatRadix floatDigits floatRange decodeFloat encodeFloatexponent significand scaleFloatisNaN isInfiniteisDenormalizedisNegativeZeroisIEEEatan2Data.Typeable.InternalTypeableControl.Monad.FixMonadFixmfixControl.Monad.Fail MonadFailfail Data.StringIsString fromString Data.FoldableFoldablefoldrlengthfoldlnullfoldl'foldl1sumproductfoldr'foldr1maximumminimumelemfoldfoldMapfoldMap'Data.Traversable TraversabletraversemapM sequenceAsequence GHC.RecordsHasFieldgetFieldFunPtrControl.Exception.Base TypeError Data.TypeableTypeRep Unsafe.CoerceUnsafeEquality UnsafeRefl text-2.0.2Data.Text.InternalText SomeException Alternativeempty<|>somemanyShowSGHC.Bits FiniteBits finiteBitSizecountLeadingZeroscountTrailingZerosBits.&..|.xor complementshiftrotatezeroBitsbitsetBitclearBit complementBittestBit bitSizeMaybebitSizeisSignedshiftL unsafeShiftLshiftR unsafeShiftRrotateLrotateRpopCount GHC.UnicodeGeneralCategoryControlUppercaseLetterLowercaseLetterTitlecaseLetterModifierLetter OtherLetterNonSpacingMarkSpacingCombiningMark EnclosingMark DecimalNumber LetterNumber OtherNumberConnectorPunctuationDashPunctuationOpenPunctuationClosePunctuation InitialQuote FinalQuoteOtherPunctuation MathSymbolCurrencySymbolModifierSymbol OtherSymbolSpace LineSeparatorParagraphSeparatorFormat Surrogate PrivateUse NotAssignedText.ParserCombinators.ReadPReadS ThreadStatus ThreadRunningThreadFinished ThreadBlocked ThreadDied BlockReason BlockedOnMVarBlockedOnBlackHoleBlockedOnException BlockedOnSTMBlockedOnForeignCallBlockedOnOtherTVarThreadId Data.BitsIffgetIffXorgetXorIorgetIorAndgetAndData.OrdDowngetDownData.Type.Equality:~~:HRefl:~:ReflControl.CategoryCategoryid. Data.ProxyKProxyProxy Foreign.PtrIntPtrWordPtr GHC.IO.IOModeIOModeReadMode WriteMode AppendMode ReadWriteModeMingetMinMaxgetMaxFixityPrefixInfixAltgetAltAllgetAllEndoappEndoDualgetDual Data.MonoidApgetApData.Functor.ConstConstgetConstArithException UnderflowOverflowLossOfPrecision DivideByZeroDenormalRatioZeroDenominator GHC.Exception ErrorCallErrorCallWithLocationGHC.IO MaskingStateUnmaskedMaskedInterruptibleMaskedUninterruptibleFilePath GHC.IORefIORefFinalizerEnvPtr FinalizerPtr GHC.IO.DeviceSeekMode AbsoluteSeek RelativeSeek SeekFromEnd NewlineModeinputNLoutputNLNewlineLFCRLF BufferMode NoBuffering LineBufferingBlockBuffering Data.DynamicDynamic IOErrorTypeEOF AlreadyExists NoSuchThing ResourceBusyResourceExhaustedIllegalOperationPermissionDenied UserErrorUnsatisfiedConstraints SystemError ProtocolError OtherErrorInvalidArgumentInappropriateType HardwareFaultUnsupportedOperation TimeExpiredResourceVanished InterruptedExitCode ExitSuccess ExitFailureFixIOExceptionArrayExceptionIndexOutOfBoundsUndefinedElementAsyncException StackOverflow HeapOverflow ThreadKilled UserInterruptSomeAsyncExceptionCompactionFailedAllocationLimitExceededDeadlockBlockedIndefinitelyOnSTMPrimMVarNestedAtomicallyNonTermination NoMethodError RecUpdError RecConError RecSelErrorPatternMatchFailControl.ExceptionHandlerGHC.Conc.Signal HandlerFunSignal GHC.IO.Handle HandlePosnData.Functor.IdentityIdentity runIdentityControl.ApplicativeZipList getZipList WrappedArrow WrapArrow unwrapArrow WrappedMonad WrapMonad unwrapMonadGHC.StableName StableNameGHC.OverloadedLabelsIsLabel fromLabelControl.Concurrent.QSemNQSemNControl.Concurrent.QSemQSemSystem.TimeoutTimeoutConIndex ConstrRep AlgConstr IntConstr FloatConstr CharConstrDataRepIntRepFloatRepAlgRepCharRepNoRepConstrDataType WrappedMonoid WrapMonoid unwrapMonoidArgMaxArgMinArgPicoE12NanoE9MicroE6MilliE3CentiE2DeciE1UniE0 HasResolution resolution Data.ComplexComplex:+Data.Functor.ClassesShow2liftShowsPrec2 liftShowList2Read2liftReadsPrec2 liftReadList2 liftReadPrec2liftReadListPrec2Ord2 liftCompare2Eq2liftEq2Show1 liftShowsPrec liftShowListRead1 liftReadsPrec liftReadList liftReadPrecliftReadListPrecOrd1 liftCompareEq1liftEqData.Functor.ContravariantOpgetOp EquivalencegetEquivalence Comparison getComparison Predicate getPredicate Contravariant contramap>$bytestring-0.11.5.2Data.ByteString.Internal.Type ByteStringcontainers-0.6.7Data.Map.InternalMapData.Set.InternalSetData.Sequence.InternalSeqData.IntSet.InternalIntSetData.IntMap.InternalIntMap'hashable-1.4.7.0-1oCWlNO9xK3BzoBZcN5RDuData.Hashable.ClassHashedHashable hashWithSalthash2unordered-containers-0.2.20-IKspZ9X65m0FyUIlbDwiCVData.HashMap.InternalHashMapData.HashSet.InternalHashSet&vector-0.13.2.0-BnoaV7T6knyE0xt8q2luDC Data.VectorVector GHC.TupleSolo Data.OldListsortdeleteassertevaluatefinallyhandleclamp realToFrac fromIntegral$ otherwise++mapjoin Data.TupleswapGHC.ErrerrorthrowGHC.ListzipWitheven atomically Data.Functor<$>stimesIdempotentbracketGHC.IO.Handle.Text hGetContentssortByfst Data.Boolbool Text.Read readMaybe genericLength maximumBy minimumBygenericReplicate genericTake genericDropgenericSplitAt genericIndexstToIO Data.CharisLetteruncurryfreeHaskellFunPtrGHC.IO.StdHandlesopenFileisAlphacoercenullPtrordGHC.CharchrheadgroupgroupByforforMthrowToforkIOWithUnmaskforkIO Data.IORefatomicWriteIORefatomicModifyIORefForeign.ForeignPtr.Imp newForeignPtrstdoutstdinstderr Control.MonadforeverwithForeignPtrGHC.IO.Encodingutf8mkTextEncodinghSeekhFlush hLookAhead System.IOfixIO killThreadsetAllocationCounterenableAllocationLimittouchForeignPtraddForeignPtrFinalizer GHC.Conc.IO threadDelayControl.ConcurrentforkOSmaskthrowIO GHC.IO.UnsafeunsafePerformIOtrycatch readFile' writeFilegetLineputStrLnSystem.IO.ErrorisDoesNotExistErrorSystem.EnvironmentgetArgshCloseisAlreadyInUseErrorisPermissionErrorhSetBinaryMode isFullError isEOFErrorlocaleEncodingisIllegalOperationliftMfilter forkFinallygetEnvsetEnv lookupEnvunsetEnvunfoldr transpose System.ExitexitWithhGetBufhPutBuf hWaitForInputsortOncycleseqconcatzip newStablePtrprint GHC.Magiclazy assertError Debug.Tracetraceinline>>>guardtoDynunsafeEqualityProof unsafeCoerce#^&&||not GHC.NaturalminusNaturalMaybeerrorWithoutStackTrace undefinedstimesIdempotentMonoidabsurdvacuous<**>liftAliftA3=<<whenliftM2liftM3liftM4liftM5apconstflip$!untilasTypeOf makeVersionsubtract Data.MaybemaybeisJust isNothingfromJust fromMaybe maybeToList listToMaybe catMaybesmapMaybeunconstaillastinitfoldl1'scanlscanl1scanl'scanrscanr1iterateiterate'repeat replicate takeWhile dropWhiletakedropsplitAtspanbreakreverseandoranyallnotElemlookup concatMap!!zip3zipWith3unzipunzip3showsshowChar showString showParen showLitChar intToDigit% numerator denominator showSignedodd^^gcdlcm bitDefaulttestBitDefaultpopCountDefaulttoIntegralSized byteSwap16 byteSwap32 byteSwap64 bitReverse8 bitReverse16 bitReverse32 bitReverse64runST unsafeCoerceunsafeCoerceUnliftedunsafeCoerceAddr showFloat floatToDigitsfromRatnewSTRef readSTRef writeSTRefunsafeDupablePerformIOunsafeInterleaveIOsndcurry newEmptyMVarnewMVartakeMVarreadMVarputMVar tryTakeMVar tryPutMVar tryReadMVar isEmptyMVarControl.Concurrent.MVaraddMVarFinalizer<&>$>void Data.Functionfixon& applyWhengeneralCategoryisAsciiisLatin1 isAsciiLower isAsciiUpper isControlisPrintisSpaceisUpper isUpperCaseisLower isLowerCase isAlphaNumisDigit isOctDigit isHexDigit isPunctuationisSymboltoUppertoLowertoTitleoptionallex readParen lexLitChar readLitChar lexDigitsNumericreadIntreadBinreadOctreadDecreadHex readFloat readSignedshowInt showEFloat showFFloat showGFloat showFFloatAlt showGFloatAlt showHFloat showIntAtBaseshowHexshowOctshowBincastPtrplusPtralignPtrminusPtr nullFunPtr castFunPtrcastFunPtrToPtrcastPtrToFunPtr threadStatus myThreadId freeStablePtrdeRefStablePtrcastStablePtrToPtrcastPtrToStablePtreitherleftsrightspartitionEithersisLeftisRightfromLeft fromRightreads readEitherreadoneBits.^..>>..<<.!>>.!<<. comparing<<< asProxyTypeOf ptrToWordPtr wordPtrToPtr ptrToIntPtr intPtrToPtr digitToIntisMarkisNumber isSeparator stimesMonoidfoldrMfoldlM traverse_for_mapM_forM_ sequenceA_ sequence_asummsumfind tyConPackage tyConModule tyConNametyConFingerprintrnfTyContypeRepFingerprint trLiftedRep typeRepTyContypeReptypeOf rnfTypeRep showsTypeRepcasteqTheqTgcastgcast1gcast2 funResultTymkFunTy splitTyConApp typeRepArgstypeOf1typeOf2typeOf3typeOf4typeOf5typeOf6typeOf7 dropWhileEnd stripPrefix elemIndex elemIndices findIndex findIndices isPrefixOf isSuffixOf isInfixOfnubnubBydeleteBy\\unionunionBy intersect intersectBy intersperse intercalate partition mapAccumL mapAccumRinsertinsertByzip4zip5zip6zip7zipWith4zipWith5zipWith6zipWith7unzip4unzip5unzip6unzip7deleteFirstsByinitstails subsequences permutations singletonlinesunlineswordsunwordsunsupportedOperation userError interruptiblegetMaskingState onExceptionmask_uninterruptibleMask_uninterruptibleMasknewIORef readIORef writeIORefatomicModifyIORef'mallocForeignPtrmallocForeignPtrBytesaddForeignPtrFinalizerEnvnewForeignPtr_castForeignPtrplusForeignPtrfinalizeForeignPtrnewForeignPtrEnvmallocForeignPtrArraymallocForeignPtrArray0 nativeNewlineuniversalNewlineModenativeNewlineModenoNewlineTranslation mkWeakIORef modifyIORef modifyIORef'fromDyn fromDynamicdynApplydynApp dynTypeRepblockedIndefinitelyOnMVarblockedIndefinitelyOnSTMallocationLimitExceededcannotCompactFunctioncannotCompactPinnedcannotCompactMutableasyncExceptionToExceptionasyncExceptionFromException stackOverflow heapOverflow ioExceptionioErroruntanglereportHeapOverflowgetAllocationCounterdisableAllocationLimitforkOnforkOnWithUnmasknumCapabilitiesgetNumCapabilitiessetNumCapabilitiesgetNumProcessors numSparks childHandleryield labelThreadpseqpar runSparks listThreadsthreadCapabilitymkWeakThreadIdnewStablePtrPrimMVar unsafeIOToSTMretrythrowSTMcatchSTMnewTVar newTVarIO readTVarIOreadTVar writeTVarwithMVar modifyMVar_reportStackOverflow reportErrorsetUncaughtExceptionHandlergetUncaughtExceptionHandler catchJust handleJust mapExceptiontryJustbracket_bracketOnErrorcatchesallowInterruptSystem.IO.Unsafe unsafeFixIOswapMVarwithMVarMasked modifyMVarmodifyMVarMasked_modifyMVarMasked mkWeakMVarControl.Monad.ST.ImpfixST setHandler runHandlers tryIOError mkIOErrorisAlreadyExistsError isUserErrorisResourceVanishedErroralreadyExistsErrorTypedoesNotExistErrorTypealreadyInUseErrorType fullErrorType eofErrorTypeillegalOperationErrorTypepermissionErrorType userErrorTyperesourceVanishedErrorTypeisAlreadyExistsErrorTypeisDoesNotExistErrorTypeisAlreadyInUseErrorTypeisFullErrorTypeisEOFErrorTypeisIllegalOperationErrorTypeisPermissionErrorTypeisUserErrorTypeisResourceVanishedErrorTypeioeGetErrorTypeioeGetErrorStringioeGetLocation ioeGetHandleioeGetFileNameioeSetErrorTypeioeSetErrorStringioeSetLocation ioeSetHandleioeSetFileName modifyIOErrorannotateIOError catchIOErrorutf8_bomutf32utf32beutf32leutf16utf16beutf16lelatin1char8traceIOhGetCharhGetLine hGetContents'hPutCharhPutStr hPutStrLnhPutBufNonBlocking hGetBufSomehGetBufNonBlockingensureIOManagerIsRunningioManagerCapabilitiesChangedthreadWaitReadthreadWaitWritethreadWaitReadSTMthreadWaitWriteSTM closeFdWith registerDelaywithFileopenBinaryFilewithBinaryFile hFileSize hSetFileSizehIsEOFisEOF hSetBuffering hSetEncoding hGetEncodinghGetPosnhSetPosnhTellhIsOpen hIsClosed hIsReadable hIsWritable hGetBuffering hIsSeekablehSetEchohGetEchohIsTerminalDevicehSetNewlineModehShowputCharputStrgetChar getContents getContents'interactreadFile appendFilereadLnreadIOhReadyhPrint openTempFileopenBinaryTempFile"openTempFileWithDefaultPermissions(openBinaryTempFileWithDefaultPermissions mapAccumM forAccumM fmapDefaultfoldMapDefault Data.ListisSubsequenceOf showVersion parseVersionfilterM>=><=< mapAndUnzipMzipWithM zipWithM_foldMfoldM_ replicateM replicateM_unless<$!>mfilter System.MemperformMinorGCperformMajorGC performGC exitFailure exitSuccessdiemakeStableNamehashStableName eqStableName Text.PrintfprintfhPrintf!System.Environment.ExecutablePathgetExecutablePathexecutablePath getProgNamewithArgs withProgNamegetEnvironment traceMarkerIO traceMarker traceEventIO traceEvent traceStack traceShowMtraceM traceShowId traceShowtraceId putTraceMsg traceWith traceShowWithtraceEventWith flushEventLog Data.STRef modifySTRef modifySTRef' Data.RatioapproxRationalGHC.Exts groupWithsortWithnewQSemN waitQSemN signalQSemNnewQSemwaitQSem signalQSemnewChan writeChanreadChandupChangetChanContentswriteList2ChanrtsSupportsBoundThreadsforkOSWithUnmaskisCurrentThreadBoundrunInBoundThreadrunInUnboundThreadtimeout fromConstr fromConstrB fromConstrM dataTypeName dataTypeRep constrType constrRep repConstr mkDataType mkConstrTagmkConstrdataTypeConstrs constrFields constrFixity showConstr readConstr isAlgType indexConstr constrIndexmaxConstrIndex mkIntType mkFloatType mkCharTypemkIntegralConstr mkRealConstr mkCharConstr mkNoRepType isNorepType tyconUQname tyconModulecycle1diff mtimesDefaultdiv'divMod'mod' showFixedrealPartimagPart conjugatemkPolarcispolar magnitudephaseeq1compare1 readsPrec1 readPrec1liftReadListDefaultliftReadListPrecDefault showsPrec1eq2compare2 readsPrec2 readPrec2liftReadList2DefaultliftReadListPrec2Default showsPrec2 readsDatareadDatareadsUnaryWith readUnaryWithreadsBinaryWithreadBinaryWithshowsUnaryWithshowsBinaryWith readsUnary readsUnary1 readsBinary1 showsUnary showsUnary1 showsBinary1phantom$<>$<>$$<defaultComparisondefaultEquivalencecomparisonEquivalenceData.Hashable.LowLevelhashPtrWithSalthashByteArrayWithSaltdefaultHashWithSalt defaultHash hashUsinghashPtr hashByteArrayhashedunhashed hashedHash mapHashedtraverseHashed$fIsomorphicToaatoUnliftedByteArrayfromUnliftedByteArrayfromShortByteStringtoShortByteString fromByteArray toByteArray