DbSafeq  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None None GNonenA 8 for string interpolation. Expression enclosed within #{...}/ are interpolated, the result has to be in the  class.It interpolates stringslet name = "Marvin"putStrLn [i|name: #{name}|] name: Marvin or integers let age = 23putStrLn [i|age: #{age}|]age: 23 or arbitrary Haskell expressions!let profession = "\955-scientist">putStrLn [i|profession: #{unwords [name, "the", profession]}|]"profession: Marvin the -scientistNoneLike  , but constructs a value of type IsString a => aSafeURemove indentation as much as possible while preserving relative indentation levels. is useful in combination with  to remove leading spaces that resulted from code indentation. That way you can freely indent your string literals without the indentation ending up in the resulting strings.Here is an example::set -XQuasiQuotesimport Data.String.Interpolate#import Data.String.Interpolate.Util:{  putStr $ unindent [i| def foo 23 end |]:}def foo 23endVTo allow this, two additional things are being done, apart from removing indentation:3One empty line at the beginning will be removed andif the last newline character ("\n"0) is followed by spaces, the spaces are removed.Safe;                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                     ! " # $ % & ' ( ) * * + , - . / 0 1 2 3 4 5 5 6 7 8 9 : ; < = > ? @ABCDEFDEGDEHDEIDEJDEKDELDEMDENDEODEPDEQDERDESDETDEUDEVDEWDEXDEYDEZDE[DE\DE]DE^DE_DE`DEaDEbDEcDEdDEeDEfDEgDEhDEiDEjDEkDElDEmDEnDEoDEpDEqDErDEsDEtDEuDEvDEwDExDEyDEzDE{DE|DE}DE~DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE                                                                                                                ! " " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B B C D D E E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ^ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~       G                        A(interpolate-0.2.0-8qeBODTfMSgLe9QfN8KbR5Data.String.Interpolate Data.String.Interpolate.IsStringData.String.Interpolate.UtilData.String.Interpolate.Compat%Data.String.Interpolate.Internal.UtilData.String.Interpolate.ParseiPaths_interpolateunindenttemplate-haskellLanguage.Haskell.TH.SyntaxnewNamemkNameLanguage.Haskell.TH.LibcharLstringLintegerLintPrimL wordPrimL floatPrimL doublePrimL rationalL stringPrimL charPrimLlitPvarPtupP unboxedTupP unboxedSumPconPinfixPtildePbangPasPwildPrecPlistPsigPviewPfieldPatmatchclausevarEconElitEappEappTypeEinfixEinfixAppsectionLsectionRlamElamCaseEtupE unboxedTupE unboxedSumEcondEmultiIfEletEcaseEdoEcompEfromE fromThenEfromToE fromThenToElistEsigErecConErecUpdEstaticE unboundVarEfieldExpguardedBnormalBnormalGEpatGEbindSletSnoBindSparSfunDvalDdataDnewtypeDtySynDclassDinstanceWithOverlapDsigDforImpDpragInlD pragSpecD pragSpecInlD pragSpecInstD pragRuleDpragAnnD dataFamilyDopenTypeFamilyD dataInstD newtypeInstD tySynInstDclosedTypeFamilyDinfixLDinfixRDinfixND roleAnnotDstandaloneDerivWithStrategyD defaultSigDpatSynD patSynSigD pragCompleteDcxtnoSourceUnpackednesssourceNoUnpack sourceUnpacknoSourceStrictness sourceLazy sourceStrictnormalCrecCinfixCforallCgadtCrecGadtCbangbangType varBangTypeunidir implBidir explBidir prefixPatSyn infixPatSyn recordPatSynforallTvarTconTtupleT unboxedTupleT unboxedSumTarrowTlistTappTsigT equalityTlitT promotedTpromotedTupleT promotedNilT promotedConsT wildCardTnumTyLitstrTyLitplainTVkindedTVnominalRrepresentationalRphantomRinferRvarKconKtupleKarrowKlistKappKstarK constraintKnoSigkindSigtyVarSiginjectivityAnncCallstdCallcApiprim javaScriptunsafesafe interruptiblefunDeptypeFamdataFamtySynEqnruleVar typedRuleVarvalueAnnotationtypeAnnotationmoduleAnnotation derivClauseExpVarEConELitEAppEAppTypeEInfixEUInfixEParensELamELamCaseETupE UnboxedTupE UnboxedSumECondEMultiIfELetECaseEDoECompE ArithSeqEListESigERecConERecUpdEStaticE UnboundVarEMatchClauseQExpQDecQPatLitPVarPTupP UnboxedTupP UnboxedSumPConPInfixPUInfixPParensPTildePBangPAsPWildPRecPListPSigPViewPMatchQClauseQStmtQConQTypeQTypeListTForallTAppTSigTVarTConT PromotedTInfixTUInfixTParensTTupleT UnboxedTupleT UnboxedSumTArrowT EqualityTPromotedTupleT PromotedNilT PromotedConsTStarT ConstraintTLitT WildCardTDecFunDValDDataDNewtypeDTySynDClassD InstanceDSigDForeignDInfixDPragmaD DataFamilyD DataInstD NewtypeInstD TySynInstDOpenTypeFamilyDClosedTypeFamilyD RoleAnnotDStandaloneDerivD DefaultSigDPatSynD PatSynSigD BangTypeQ VarBangTypeQFieldExpFieldPatNamePatQ FieldPatQ FieldExpQFunDepPredPredQ TyVarBndrPlainTVKindedTVDecsQ RuleBndrQ TySynEqnQTExpunTypeInjectivityAnnKindOverlap Overlappable OverlappingOverlaps Incoherent DerivClauseQ DerivStrategy StockStrategyAnyclassStrategyNewtypeStrategybase Text.Read readMaybeghc-boot-th-8.2.2GHC.LanguageExtensions.Type ExtensionStrictCppOverlappingInstancesUndecidableInstancesIncoherentInstancesUndecidableSuperClassesMonomorphismRestriction MonoPatBindsMonoLocalBindsRelaxedPolyRecExtendedDefaultRulesForeignFunctionInterfaceUnliftedFFITypesInterruptibleFFICApiFFIGHCForeignImportPrim JavaScriptFFIParallelArraysArrowsTemplateHaskellTemplateHaskellQuotes QuasiQuotesImplicitParamsImplicitPreludeScopedTypeVariablesAllowAmbiguousTypes UnboxedTuples UnboxedSums BangPatterns TypeFamiliesTypeFamilyDependencies TypeInTypeOverloadedStringsOverloadedLists NumDecimalsDisambiguateRecordFieldsRecordWildCards RecordPuns ViewPatternsGADTs GADTSyntaxNPlusKPatternsDoAndIfThenElseRebindableSyntaxConstraintKinds PolyKinds DataKinds InstanceSigs ApplicativeDoStandaloneDerivingDeriveDataTypeableAutoDeriveTypeable DeriveFunctorDeriveTraversableDeriveFoldable DeriveGenericDefaultSignaturesDeriveAnyClass DeriveLiftDerivingStrategiesTypeSynonymInstancesFlexibleContextsFlexibleInstancesConstrainedClassMethodsMultiParamTypeClassesNullaryTypeClassesFunctionalDependencies UnicodeSyntaxExistentialQuantification MagicHashEmptyDataDeclsKindSignaturesRoleAnnotationsParallelListCompTransformListCompMonadComprehensionsGeneralizedNewtypeDeriving RecursiveDoPostfixOperators TupleSections PatternGuardsLiberalTypeSynonyms RankNTypesImpredicativeTypes TypeOperatorsExplicitNamespacesPackageImportsExplicitForAllAlternativeLayoutRule!AlternativeLayoutRuleTransitionalDatatypeContextsNondecreasingIndentation RelaxedLayoutTraditionalRecordSyntax LambdaCase MultiWayIfBinaryLiteralsNegativeLiteralsDuplicateRecordFieldsOverloadedLabels EmptyCasePatternSynonymsPartialTypeSignaturesNamedWildCardsStaticPointersTypeApplications StrictDataMonadFailDesugaring thisModuleappsE varStrictType strictTypeunpacked notStrictisStrictequalPclassPparensTuInfixTinfixTstandaloneDerivDclosedTypeFamilyKindDclosedTypeFamilyNoKindD familyKindD familyNoKindD pragLineD instanceDstringE arithSeqElam1EuInfixEparensEdynpatGnormalG fromThenToRfromToR fromThenRfromRparensPuInfixPInfoQTExpQTyLitQCxtQBodyQGuardQRangeQSourceStrictnessQSourceUnpackednessQBangQ StrictTypeQVarStrictTypeQ PatSynDirQ PatSynArgsQLanguage.Haskell.TH.Ppr pprParendTypepprPatpprLitpprExppprintPprpprppr_list defaultFixity maxPrecedenceunboxedSumTypeNameunboxedSumDataNameunboxedTupleTypeNameunboxedTupleDataName tupleTypeName tupleDataName nameSpace namePackage nameModulenameBase extsEnabled isExtEnabledrunIOlocation isInstancereifyConStrictness reifyModulereifyAnnotations reifyRolesreifyInstances reifyFixityreifylookupValueNamelookupTypeNamerecover reportWarning reportErrorreportrunQ NameSpaceLoc loc_filename loc_package loc_module loc_startloc_endInfoClassIClassOpITyConIFamilyI PrimTyConIDataConIPatSynIVarITyVarI ModuleInfo ParentNameSumAltSumArityArityUnlifted InstanceDecFixityFixityDirectionInfixLInfixRInfixNLitCharLStringLIntegerL RationalLIntPrimL WordPrimL FloatPrimL DoublePrimL StringPrimL CharPrimLBodyGuardedBNormalBGuardNormalGPatGStmtBindSLetSNoBindSParSRangeFromR FromThenRFromToR FromThenToR DerivClause PatSynTypeTypeFamilyHeadTySynEqn FamFlavourTypeFamDataFamForeignImportFExportFCallconvStdCallCCall JavaScriptCApiPrimSafetySafeUnsafe InterruptiblePragmaInlineP SpecialisePSpecialiseInstPRulePAnnPLineP CompletePInlineNoInline Inlinable RuleMatchConLikeFunLikePhases AllPhases FromPhase BeforePhaseRuleBndrRuleVar TypedRuleVar AnnTargetModuleAnnotationTypeAnnotationValueAnnotationCxtSourceUnpackedness SourceUnpackSourceNoUnpackNoSourceUnpackednessSourceStrictness SourceLazy SourceStrictNoSourceStrictnessDecidedStrictness DecidedLazy DecidedStrict DecidedUnpackConNormalCRecCInfixCForallCGadtCRecGadtCBang PatSynDirUnidir ImplBidir ExplBidir PatSynArgs PrefixPatSyn InfixPatSyn RecordPatSynFamilyResultSigKindSigTyVarSigNoSigTyLitNumTyLitStrTyLitRoleNominalRRepresentationalRPhantomRInferR AnnLookupAnnLookupModule AnnLookupNametoStringunescapeNode ExpressionLiteral parseNodesLanguage.Haskell.TH.Quote QuasiQuoterGHC.ShowShowversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName