b,      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Safe%!"&+-23459:;<=?@DFHJLOQRT[\]^abc=Hilbert TensorAlgebra <ExpField ExpRing  BoundedFieldBanachNormedMetricIntegral `b == zero || b * (a `div` b) + (a `mod` b) == a b == zero || b * (a `quot` b) + (a `rem` b) == a#truncates towards negative infinityMultiplicativeGroupModuleMultiplicativeModule 8MultiplicativeGroupBasis element by element subtraction"0MultiplicativeBasis element by element addition$AdditiveGroupModule'AdditiveModule*2AdditiveGroupBasis element by element subtraction,*AdditiveBasis element by element addition.Field DivisionRing/Ring0 a semiring1 Distributive a . (b + c) == a . b + a . c (a + b) . c == a . c + b . c2MultiplicativeGroup  a / a = one recip a = one / a recip a * a = one4JMultiplicative is commutative, associative and unital under multiplication  a * b = b * a (a * b) * c = a * (b * c)  one * a = a  a * one = a6MultiplicativeMonoidal7MultiplicativeHomomorphic " a " A: timeshom a " B&law is true by construction in Haskell9MultiplicativeInvertible " a " A: recip a " A&law is true by construction in Haskell;MultiplicativeAssociative 2(a `times` b) `times` c == a `times` (b `times` c)<MultiplicativeCommutative a `times` b == b `times` a=MultiplicativeUnital %one `times` a == a a `times` one == a?@: is used for the multiplicative magma to distinguish from 5, which, by convention, implies commutativityA AdditiveGroup  a - a = zero negate a = zero - a negate a + a = zeroC>Additive is commutative, unital and associative under addition  a + b = b + a (a + b) + c = a + (b + c)  zero + a = a  a + zero = aEAdditiveMonoidalFAdditiveHomomorphic " a " A: plushom a " B&law is true by construction in HaskellHAdditiveInvertible " a " A: negate a " A&law is true by construction in HaskellJAdditiveCommutative a `plus` b == b `plus` aKAdditiveAssociative .(a `plus` b) `plus` c == a `plus` (b `plus` c)LAdditiveUnital %zero `plus` a == a a `plus` zero == aNO4 is used for the additive magma to distinguish from D, which, by convention, implies commutativityPCAn Abelian Group is associative, unital, invertible and commutativeQ-A Group is associative, unital and invertibleRA Loop is unital and invertibleS9A CMonoidal Magma is commutative, associative and unital.T+A Monoidal Magma is associative and unital.U A Homomorphic between two Magmas " a " A: hom a " B&law is true by construction in HaskellWAn Idempotent Magma  a " a = aXAn Invertible Magma " a " T: inv a " T&law is true by construction in HaskellZA Commutative Magma  a " b = b " a[An Associative Magma (a " b) " c = a " (b " c)\A Unital Magma unit " a = a a " unit = a^A  -https://en.wikipedia.org/wiki/Magma_(algebra)Magma is a tuple (T,") consisting of a type a, anda function (") :: T -> T -> T&The mathematical laws for a magma are:2" is defined for all possible pairs of type T, and7" is closed in the set of all possible values of type Tor, more tersly, " a, b " T: a " b " TFThese laws are true by construction in haskell: the type signature of magma. and the above mathematical laws are synonyms.see 8http://chris-taylor.github.io/blog/2013/02/25/xor-trick/`absainfinityb(^)csquaredInnerProductNorm dinnerProductNorm einnerProductDistance  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~f   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef^_\][ZXYWUVTSRQPNOLMKJHIFGECDAB?@=>;<9:786452310/.,-*+'()$%&"# !` a b cdex   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~888777777!7#7%7&7(7)7+7-73757B6D6Safe%!"&,-23459:;<=?@DFHJLOQRT[\]^abc*a wrapped fixed-size traversable container!None%!"&,-23459:;<=?@DFHJLOQRT[\]^abc!wrapped fixed-size unboxed vectorbtoVectorU right pads with zeros, if necessary which introduces an extra AdditiveUnital constraintNone$!"&-23459:;<=?@DFHJLOQRT[\]^abc@      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-,.,/0123456789:;<=>?@ABCDEFGHIJKLKMKN,O,P,Q,R,S,T,U,VWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|{}{~{{{{{{{{{{:r      !"#$$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~,,              !"#$%%&&''(())**++,,-.-/-0123456789:;<=>?@ABACADAEAEAFAFAGAGAHAHAIAIAJAJAKALAMANAOAPAQARASATAUVWVWVXYZ{[{\{]{^{_{`{a{b{c{d{e{f{g{h{i{j{k{l{m{nopopoqororosototouovovowoxoxoyozozo{o|o|o}o~o~ooooAr.      !"#$K%&'&(&)&*&+&,&-&.&/&0123456789:;<=>?@ABCDEFGHIJJKL,M,N,OPQRSTUSVWSXYSZ[S\]^_`^_a^_b^_c^_defghijhikhilhmnhmohmphmqhmrhsthsuhsvhswhsxhsyez{ez|ez}ez~eeeeeeeeeeeeevvvvvvqqqqqDDDD"tower-0.1.0-3rOtN6T5xUUF8HSZ3rkFlP Tower.Algebra Tower.VectorA Tower.VectorU Tower.PreludeHilbert TensorAlgebra>< timesleft timesrightExpFieldsqrtexplogExpRinglogBase** BoundedFieldnanBanach normalizeNormedsizeMetricdIntegral toIntegerdivmoddivModMultiplicativeGroupModule.//.MultiplicativeModule.**.MultiplicativeGroupBasis./.MultiplicativeBasis.*.AdditiveGroupModule.--.AdditiveModule.++.AdditiveGroupBasis.-. AdditiveBasis.+.FieldRingSemiring DistributiveMultiplicativeGroup/Multiplicative*MultiplicativeMonoidalMultiplicativeHomomorphictimeshomMultiplicativeInvertiblerecipMultiplicativeAssociativeMultiplicativeCommutativeMultiplicativeUnitaloneMultiplicativeMagmatimes AdditiveGroup-Additive+AdditiveMonoidalAdditiveHomomorphicplushomAdditiveInvertiblenegateAdditiveCommutativeAdditiveAssociativeAdditiveUnitalzero AdditiveMagmaplusAbelianGroupLoop CMonoidalMonoidal Homomorphichom Idempotent Invertibleinv Commutative AssociativeUnitalunitMagma⊕absinfinity^squaredInnerProductNorminnerProductNorminnerProductDistance$fBoundedFieldDouble$fBoundedDouble$fBoundedFieldFloat$fBoundedFloat $fIntegralInt $fFieldFloat $fFieldDouble$fDivisionRingFloat$fDivisionRingDouble $fRingFloat $fRingDouble $fSemiringInt$fSemiringFloat$fSemiringDouble$fDistributiveInt$fDistributiveFloat$fDistributiveDouble$fMultiplicativeGroupFloat$fMultiplicativeGroupDouble$fMultiplicativeInt$fMultiplicativeFloat$fMultiplicativeDouble$fMultiplicativeHomomorphicaa$fMultiplicativeInvertibleFloat $fMultiplicativeInvertibleDouble$fMultiplicativeAssociativeInt $fMultiplicativeAssociativeFloat!$fMultiplicativeAssociativeDouble$fMultiplicativeCommutativeInt $fMultiplicativeCommutativeFloat!$fMultiplicativeCommutativeDouble$fMultiplicativeUnitalInt$fMultiplicativeUnitalFloat$fMultiplicativeUnitalDouble$fMultiplicativeMagmaInt$fMultiplicativeMagmaFloat$fMultiplicativeMagmaDouble$fAdditiveGroupInt$fAdditiveGroupFloat$fAdditiveGroupDouble $fAdditiveInt$fAdditiveFloat$fAdditiveDouble$fAdditiveHomomorphicaa$fAdditiveInvertibleInt$fAdditiveInvertibleFloat$fAdditiveInvertibleDouble$fAdditiveCommutativeInt$fAdditiveCommutativeFloat$fAdditiveCommutativeDouble$fAdditiveAssociativeInt$fAdditiveAssociativeFloat$fAdditiveAssociativeDouble$fAdditiveUnitalInt$fAdditiveUnitalFloat$fAdditiveUnitalDouble$fAdditiveMagmaInt$fAdditiveMagmaFloat$fAdditiveMagmaDouble$fHomomorphicaaVectorAunvec$fDistributiveVectorA$fMultiplicativeModuleaVectorA#$fMultiplicativeHomomorphicaVectorA$fMultiplicativeVectorA!$fMultiplicativeInvertibleVectorA$fMultiplicativeUnitalVectorA"$fMultiplicativeCommutativeVectorA"$fMultiplicativeAssociativeVectorA$fMultiplicativeMagmaVectorA$fAdditiveModuleaVectorA$fAdditiveHomomorphicaVectorA$fAdditiveGroupVectorA$fAdditiveVectorA$fAdditiveInvertibleVectorA$fAdditiveUnitalVectorA$fAdditiveCommutativeVectorA$fAdditiveAssociativeVectorA$fAdditiveMagmaVectorA$fApplicativeSupply$fFunctorSupply$fArbitraryVectorA $fShowVectorA $fEqVectorAVectorUv toVectorU$fIntegralVectorU $fRingVectorU$fDistributiveVectorU$fMultiplicativeModuleaVectorU#$fMultiplicativeHomomorphicaVectorU$fMultiplicativeGroupVectorU$fMultiplicativeVectorU!$fMultiplicativeInvertibleVectorU$fMultiplicativeUnitalVectorU"$fMultiplicativeCommutativeVectorU"$fMultiplicativeAssociativeVectorU$fMultiplicativeMagmaVectorU$fAdditiveModuleaVectorU$fAdditiveHomomorphicaVectorU$fAdditiveGroupVectorU$fAdditiveVectorU$fAdditiveInvertibleVectorU$fAdditiveUnitalVectorU$fAdditiveCommutativeVectorU$fAdditiveAssociativeVectorU$fAdditiveMagmaVectorU$fArbitraryVectorU $fEqVectorU $fShowVectorU DivisionRing groupSwapSupplyunSupply runSupplysupply zipWithTFbinOpbaseGHC.Base++ghc-primGHC.PrimseqGHC.Listfilterzip Data.Tuplefstsnd otherwise integer-gmpGHC.Integer.Type mkInteger smallInteger integerToWord integerToInt plusInteger timesInteger minusInteger negateInteger eqInteger# neqInteger# absInteger signumInteger leInteger# gtInteger# ltInteger# geInteger#compareInteger quotInteger remInteger divInteger modInteger divModIntegerquotRemIntegerfloatFromIntegerdoubleFromIntegerencodeFloatIntegerencodeDoubleInteger andInteger orInteger xorIntegercomplementInteger shiftLInteger shiftRInteger wordToIntegerdecodeDoubleInteger$ GHC.FloatrationalToFloatrationalToDoubleGHC.Real fromIntegral realToFrac Control.MonadguardjoinGHC.EnumBoundedminBoundmaxBoundEnumenumFrom enumFromThenenumFromThenTo enumFromTofromEnumtoEnumsuccpred GHC.ClassesEq==/=Floatingpisincostanasinacosatansinhcoshtanhasinhacoshatanhlog1pexpm1log1pexplog1mexp Fractional fromRationalMonad>>=>>returnFunctorfmap<$GHC.NumNum fromIntegersignumOrd>=minmax><<=compareGHC.ReadReadReal toRational RealFloat floatRadix floatDigits floatRange decodeFloat encodeFloatexponent significand scaleFloatisNaN isInfiniteisDenormalizedisNegativeZeroisIEEEatan2RealFracproperFractiontruncateroundceilingfloorGHC.ShowShowData.Typeable.InternalTypeable Data.StringIsString Applicativepure<*>*><* Data.FoldableFoldabletoListfoldrfoldMapnulllengthfoldlfoldl'maximumminimumelemfoldfoldr'Data.Traversable TraversabletraversemapM sequenceAsequence GHC.GenericsGenericRepfromto ConstructorconName conFixity conIsRecordSelectorselNameselSourceUnpackednessselSourceStrictnessselDecidedStrictnessGHC.OverloadedLabelsIsLabel fromLabelData.Semigroup Semigroup<>sconcatstimesMonoidmemptymappendmconcat GHC.TypesBoolFalseTrueCharDouble#DoubleD#Float#FloatF#IntGHC.IntInt8Int16Int32Int64IntegerMaybeNothingJustOrderingLTEQGTRatio:%Rational RealWorldIOWordGHC.WordWord8Word16Word32Word64GHC.PtrPtrFunPtr Data.EitherEitherLeftRightType ConstraintV1U1K1unK1M1unM1:+::*:Rec0D1C1S1 CoercibleGHC.Stack.Types CallStackTypeRepGHC.STSTGHC.IO.Handle.TypesHandle GHC.Conc.SyncforkOnWithUnmaskforkIOWithUnmaskforkOnControl.ConcurrentforkOSThreadId!async-2.1.1-xFiBzw9xoB8HPZAuxUY2oControl.Concurrent.AsyncreplicateConcurrently_replicateConcurrently concurrently_forConcurrently_mapConcurrently_forConcurrentlymapConcurrently concurrentlyrace_racelink2link waitBothSTMwaitBothwaitEitherCancelwaitEitherSTM_ waitEither_ waitEitherSTM waitEitherwaitEitherCatchCancelwaitEitherCatchSTMwaitEitherCatch waitAnyCancel waitAnySTMwaitAnywaitAnyCatchCancelwaitAnyCatchSTM waitAnyCatch cancelWithuninterruptibleCancelcancelpollSTM waitCatchSTMwaitSTMpoll waitCatchwaitwithAsyncOnWithUnmaskwithAsyncWithUnmask withAsyncOnwithAsyncBound withAsyncasyncOnWithUnmaskasyncWithUnmaskasyncOn asyncBoundasyncAsync asyncThreadId ConcurrentlyrunConcurrentlyclamp word2Float word2Double powerDouble tanhDouble coshDouble sinhDouble atanDouble acosDouble asinDouble tanDouble cosDouble sinDouble sqrtDouble logDouble expDouble float2Double double2FloatleDoubleltDoublegeDoublegtDouble negateDouble divideDouble timesDouble minusDouble plusDouble powerFloat tanhFloat coshFloat sinhFloat atanFloat acosFloat asinFloattanFloatcosFloatsinFloat sqrtFloatlogFloatexpFloatleFloatltFloatgeFloatgtFloat negateFloat divideFloat timesFloat minusFloat plusFloat fromRat''integerLogBaseexpts10 maxExpt10exptsexptmaxExptminExptfromRat'roundToformatRealFloatAltformatRealFloat isFloatNaNisFloatInfiniteisFloatDenormalizedisFloatNegativeZero isFloatFinite isDoubleNaNisDoubleInfiniteisDoubleDenormalizedisDoubleNegativeZeroisDoubleFinite log1pDouble expm1Double log1pFloat expm1FloatFFFormat FFExponentFFFixed FFGenericintegralEnumFromThenTointegralEnumFromTointegralEnumFromThenintegralEnumFromgcdWord'gcdInt'^^%^^^%^numericEnumFromThenTonumericEnumFromTonumericEnumFromThennumericEnumFrom notANumber ratioPrec1 ratioPrec overflowErrorratioZeroDenominatorError divZeroErrorreduce predError succError fromEnumError toEnumErrorboundedEnumFromThenboundedEnumFromGHC.Float.RealFracMethods int2Float float2Int int2Double double2Int hashInteger neqInteger eqInteger leInteger ltInteger gtInteger geIntegertestBitIntegereqFloateqDoublemaxIntminIntData.Functor.IdentityIdentity runIdentity Data.VoidvacuousabsurdVoid Data.Complexphase magnitudepolarcismkPolar conjugateimagPartrealPartComplex:+ System.Exitdie exitSuccess exitFailureexitWithSystem.EnvironmentgetArgsGHC.ExecutionStackshowStackTrace getStackTraceGHC.ExecutionStack.InternalSrcLoc sourceFile sourceLine sourceColumnLocation objectName functionNamesrcLocData.Bifunctor BifunctorfirstsecondbimapControl.Monad.IO.ClassMonadIOliftIOthreadWaitWriteSTMthreadWaitReadSTMthreadWaitWritethreadWaitReadrunInUnboundThreadrunInBoundThreadisCurrentThreadBoundforkOSWithUnmask forkFinallyrtsSupportsBoundThreadsControl.Concurrent.QSemN signalQSemN waitQSemNnewQSemNQSemNControl.Concurrent.QSem signalQSemwaitQSemnewQSemQSemControl.Concurrent.ChanwriteList2ChangetChanContents isEmptyChan unGetChandupChanreadChan writeChannewChanChanmfilterunless replicateM_ replicateMfoldM_foldM zipWithM_zipWithM mapAndUnzipMforever<=<>=>filterMfoldMapDefault fmapDefault mapAccumR mapAccumLforMforControl.ApplicativeoptionalZipList getZipList System.IOwithFileGHC.IO.Handle.FDopenFilestderrstdin GHC.Conc.IO threadDelayControl.Concurrent.MVar mkWeakMVaraddMVarFinalizermodifyMVarMaskedmodifyMVarMasked_ modifyMVar modifyMVar_withMVarMaskedwithMVarswapMVar GHC.Stack callStackControl.ExceptionallowInterruptcatchesControl.Exception.BasebracketOnErrorbracket_finallybracket onExceptiontryJusttry mapException handleJusthandle catchJustcatchPatternMatchFail RecSelError RecConError RecUpdError NoMethodError TypeErrorNonTerminationNestedAtomically Text.Read readMaybe readEitherreadsalwaysalwaysSucceedscatchSTMthrowSTMorElseretry atomicallymkWeakThreadIdthreadCapability myThreadId killThreadsetNumCapabilitiesgetNumCapabilitiesforkIOSTMstdoutGHC.IO.ExceptionioErrorasyncExceptionFromExceptionasyncExceptionToExceptionBlockedIndefinitelyOnMVarBlockedIndefinitelyOnSTMDeadlockAllocationLimitExceededAssertionFailedSomeAsyncExceptionAsyncException StackOverflow HeapOverflow ThreadKilled UserInterruptArrayExceptionIndexOutOfBoundsUndefinedElementExitCode ExitSuccess ExitFailureData.Functor.ConstConstgetConstForeign.StorableStorablefindnotElem minimumBy maximumByallanyorand concatMapconcatmsumasum sequence_ sequenceA_forM_mapM_for_ traverse_foldlMfoldrM Data.MonoidDualgetDualEndoappEndoAllgetAllAnygetAnySumgetSumProduct getProductFirstgetFirstLastgetLastAltgetAltFixityPrefixInfixMetaMetaDataMetaConsMetaSelGHC.IOevaluateuninterruptibleMaskuninterruptibleMask_maskmask_getMaskingState interruptiblestToIOFilePath MaskingStateUnmaskedMaskedInterruptibleMaskedUninterruptible IOException GHC.ExceptionprettyCallStack prettySrcLoc Exception toException fromException ErrorCallErrorCallWithLocationArithExceptionOverflow UnderflowLossOfPrecision DivideByZeroDenormalRatioZeroDenominator Data.TypeableeqTcasttypeRep byteSwap64 byteSwap32 byteSwap16 GHC.IO.IOModeIOModeReadMode WriteMode AppendMode ReadWriteModeData.Type.Coercion coerceWithCoercionisRightisLeftpartitionEithersrightsleftseitherData.Type.Equality gcastWithcastWithtranssym:~:Refl Data.ProxyProxy Data.OldListunfoldrsortBysort permutations subsequencestailsinitsgroup transpose intercalate intersperse isPrefixOfData.Ord comparingDownfromRat floatToDigits Data.BitstoIntegralSizedpopCountDefaulttestBitDefault bitDefaultBits.&..|.xor complementshiftrotatezeroBitsbitsetBitclearBit complementBittestBit bitSizeMaybebitSizeisSignedshiftLshiftRrotateLrotateRpopCount FiniteBits finiteBitSizecountLeadingZeroscountTrailingZeros Data.Functiononfix Data.Functorvoid$><$>runSTfixSTlcmgcd^^oddeven denominator numerator%GHC.CharchrzipWithreversebreaksplitAtdroptake dropWhile takeWhilecycle replicaterepeatiteratescanrscanl Data.MaybemapMaybe catMaybes listToMaybe maybeToList fromMaybe isNothingisJustmaybeswapuncurrycurry GHC.Stack.CCScurrentCallStacksubtractGHC.MVar isEmptyMVar tryReadMVar tryPutMVar tryTakeMVarputMVarreadMVartakeMVarnewMVar newEmptyMVarMVarasTypeOfflip.constordapliftM5liftM4liftM3liftM2liftMwhen=<<liftA3liftA2liftA<**> Alternativeempty<|>somemany MonadPlusmzeromplus SomeException getCallStack HasCallStack&&||notbytestring-0.10.8.1Data.ByteString.Internal ByteStringcontainers-0.5.7.1Data.IntMap.BaseIntMapData.IntSet.BaseIntSet Data.Map.BaseMap Data.SequenceSeq Data.Set.BaseSetdeepseq-1.4.2.0Control.DeepSeqforce$!!deepseqNFDatarnftransformers-0.5.2.0Control.Monad.Trans.Classlift mtl-2.2.1-6qsR1PHUy5lL47Hpoa4jCMControl.Monad.Error.Class MonadError throwError catchErrorControl.Monad.Reader.Classasks MonadReaderasklocalreaderControl.Monad.State.Classgetsmodify MonadStategetputstateControl.Monad.Trans.ExceptExceptTExcept runExcept runExceptTControl.Monad.Trans.ReaderReaderT runReaderTReader runReaderControl.Monad.Trans.State.LazyStateT runStateTStaterunState evalState execState withState evalStateT execStateT#text-1.2.2.1-9Yh8rJoh8fO2JMLWffT3QsData.Text.InternalTextData.Text.EncodingdecodeUtf8With decodeUtf8 decodeUtf8' encodeUtf8 Data.Text.IOreadFile writeFile appendFileinteract getContentsgetLineData.Text.LazytoStrict fromStrict"stm-2.4.4.1-4z2NRWnB0NIIUvSJsHW0kFControl.Monad.STMcheck"safe-0.3.14-ALdwhNEer7fKnF5VYCbXfHSafetailMaytailDeftailSafeinitMayinitDefinitSafeheadMaylastMayheadDeflastDef foldr1May foldl1MayatMayatDef'protolude-0.1.10-876FLXQyof6AoyOqRQRY4B ProtoludeshowguardedAguardedpassforeachthrowTothrowIOprintapplyNunsnocunconsmapidentity&LText LByteString<<*>>liftAA2purereitherAorEmptyorAltDebug undefinednotImplementedtraceIdtraceM traceShowM traceShowId traceShowerrortraceIOtraceputLTextputTextPrintputStrputStrLnPanicpanic FatalErrormsg<$!>liftM2'liftM' concatMapM ExceptionstryIOnotehushConvtoSLtoSLeniencyStrictLenient StringConvstrConvBase$!guardMifMunlessMwhenMbool maybeToEither maybeToLeft maybeToRight rightToMaybe leftToMaybeListsumproductlistordNubsortOnhead