Q<m      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLM 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 SafeSafe  SafehRemove new line escapes and join escaped lines together on one line to simplify parsing later on. Escapes are replaced with line breaks to not alter the line numbers.mnoNone"FKTaGP with additional location information required for creating good check messages%All commands available in DockerfilesUType of the Dockerfile ASTY+*)&%$#"! '(,-./0431257689<;:=>BA@?CDEFGHIKJLNMOPQRSTUVYXWZ[\]^_`adcbegfhiZihefgabcd^_`j]Z[\VWXYURSTOPQLMNIJKFGHCDE=>?@AB89:;<567./01234-, !"#$%&'()*+ !"#$%&'()*+./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTVWXYZ[\^_`abcdefgNone"#$*aPretty print a U to a pPretty print a  to a pNone"#VEENone3!               None<>?2 "The type of free monad EDSL blocks The type of Identity based EDSL blocks2'Runs the Dockerfile EDSL and returns a  Dockerfile$ you can pretty print or manipulate3'runs the Dockerfile EDSL and returns a p using  import Language.Docker main :: IO () main = writeFile "something.dockerfile" $ toDockerfileStr $ do from (tagged "fpco/stack-build" "lts-6.9") add ["."] "applanguage-docker" workdir "appglanguage-docker" run (words "stack build --test --only-dependencies") cmd (words "stack test") HONBUILD Dockerfile instruction3Each nested instruction gets emitted as a separate ONBUILD block 2v $ do from "node" run "apt-get update" onBuild $ do run "echo more-stuff" run "echo here" I A version of 2 which allows IO actionsJ A version of 3 which allows IO actionsK!Just runs the EDSL's writer monadL9Runs the EDSL's writer monad and pretty-prints the result9 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKL9+*)('&%$#"! ,-./0123456789:;<=>?@ABCDEFGHIJKL None4MNOPQRSTUVWXYZ[\]^_` None7a1Quasiquoter for embedding dockerfiles on the EDSL  putStr $ 2y $ do from "node" run "apt-get update" [edockerfile| RUN apt-get update CMD node something.js |] abcdabcdNone7(' !"#$%&)*+,-./2134056789:;<=>?@ABIJKLMNOPQRSTUVWXY]^hi   !"#$%&'()*+123456789:;=>?@ABCDEFHIJKLacU32JIKL5467A@=?)BCDEF!"89:;#>$%&'(H*+a   c !"#$%&'()*+VWXYRSTOPQLMNIJK=>?@AB89:;<567./01234ih^]-,1 None <>??@@ABCDEFFGHHIJKLLMNOPQQRSSTUUVWWXYYZ[[\]^_`abbcdeefgghijklmnopqrstuvwxyz{|}~+H-.L345689:<;      !"#$%&'()*+,-./0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N OPQRSTUVWXYZ[\],language-docker-2.0.0-Ig5wUJ2DLvAEC4S5XvoUOWLanguage.DockerLanguage.Docker.LexerLanguage.Docker.NormalizeLanguage.Docker.SyntaxLanguage.Docker.PrettyPrintLanguage.Docker.ParserLanguage.Docker.EDSL.TypesLanguage.Docker.EDSLLanguage.Docker.Syntax.LiftLanguage.Docker.EDSL.QuasiLanguage.Docker.PredefLanguage.Docker.EDSL.Plugins PrettyPrintPaths_language_dockerbaseControl.Monad.IO.ClassliftIO$parsec-3.1.11-Jx0X6lpzdHgC5NMoYR1Rc5Text.Parsec.Error ParseErrorreservednaturalcommaSep stringLiteralbrackets whiteSpacespacespaces1spacessymbolcaseInsensitiveCharcaseInsensitiveStringcharsWithEscapedSpaceslexemenormalizeEscapedLinesInstructionPos$sel:instruction:InstructionPos$sel:sourcename:InstructionPos$sel:lineNumber:InstructionPos LinenumberFilename InstructionFromAddUserLabel StopsignalCopyRunCmdShellWorkdirExposeVolume Entrypoint MaintainerEnvArg HealthcheckCommentOnBuildPairs Arguments CheckArgs$sel:checkCommand:CheckArgs$sel:interval:CheckArgs$sel:timeout:CheckArgs$sel:startPeriod:CheckArgs$sel:retries:CheckArgsCheckNoCheckAddArgs$sel:sourcePaths:AddArgs$sel:targetPath:AddArgs$sel:chownFlag:AddArgsCopyArgs$sel:sourcePaths:CopyArgs$sel:targetPath:CopyArgs$sel:chownFlag:CopyArgs$sel:sourceFlag:CopyArgsRetries$sel:times:RetriesDuration$sel:durationTime:Duration CopySourceNoSourceChownNoChown TargetPath$sel:unTargetPath:TargetPath SourcePath$sel:unSourcePath:SourcePath Dockerfile BaseImage UntaggedImage TaggedImage DigestedImage ImageAlias$sel:unImageAlias:ImageAlias DirectoryPorts$sel:unPorts:PortsPortPortStr PortRangeProtocolTCPUDPTagImage $fIsListPorts$fShowProtocol $fEqProtocol $fOrdProtocol $fShowPort$fEqPort $fOrdPort $fShowPorts $fEqPorts $fOrdPorts$fShowImageAlias$fEqImageAlias$fOrdImageAlias$fIsStringImageAlias $fEqBaseImage$fOrdBaseImage$fShowBaseImage$fShowSourcePath$fEqSourcePath$fOrdSourcePath$fIsStringSourcePath$fShowTargetPath$fEqTargetPath$fOrdTargetPath$fIsStringTargetPath $fShowChown $fEqChown $fOrdChown$fShowCopySource$fEqCopySource$fOrdCopySource$fShowDuration $fEqDuration $fOrdDuration $fNumDuration $fShowRetries $fEqRetries $fOrdRetries $fNumRetries$fShowCopyArgs $fEqCopyArgs $fOrdCopyArgs $fShowAddArgs $fEqAddArgs $fOrdAddArgs$fShowCheckArgs $fEqCheckArgs$fOrdCheckArgs $fShowCheck $fEqCheck $fOrdCheck$fEqInstruction$fOrdInstruction$fShowInstruction$fEqInstructionPos$fOrdInstructionPos$fShowInstructionPos prettyPrintprettyPrintInstructionPosprettyPrintBaseImageprettyPrintPairsprettyPrintPairprettyPrintArgumentsprettyPrintJSONprettyPrintPortprettyPrintFileListprettyPrintChownprettyPrintCopySourceprettyPrintDurationprettyPrintRetriesprettyPrintInstruction CheckFlag FlagInterval FlagTimeoutFlagStartPeriod FlagRetries CFlagInvalidCopyFlag FlagChown FlagSource FlagInvalidcomment taggedImage digestedImage untaggedImagemaybeImageAlias imageAlias baseImagefromcmdcopycopyFlagchown copySourceanyFlagfileListunexpectedFlagshell stopsignaldoubleQuotedValuesingleQuotedValueunquotedString singleValuepair pairsListlabelargenvpairs singlePairuseraddexposeportports portRangeportIntportWithProtocol portVariablerununtilEoluntilOccurrenceworkdirvolume maintainer argumentsExecargumentsShell arguments entrypointonbuild healthcheck checkFlag durationFlag retriesFlagparseInstructioncontentseol dockerfile parseString parseFile EInstruction StopSignalRunArgsCmdArgsEntrypointArgs OnBuildRawEmbed EBaseImageEUntaggedImage ETaggedImageEDigestedImage$fIsStringEBaseImage$fShowEBaseImage$fEqEBaseImage$fOrdEBaseImage$fFunctorEInstructionEInstructionTM EInstructionM EDockerfileTM EDockerfileMaddArgs stopSignalcopyArgsrunArgscmdArgsentrypointArgs onBuildRawembedrunDockerWriterrunDockerWriterIOrunDefrunDef2runDinstructionPos toDockerfiletoDockerfileStruntaggedtaggeddigestedaliasedtcpPortudpPort variablePortcheckintervaltimeout startPeriodretriesnoCheckonBuildtoDockerfileIOtoDockerfileStrIOrunDockerfileIOrunDockerfileStrIO$fLiftNonEmpty $fLiftFixed$fLiftDiffTime$fLiftProtocol $fLiftPort $fLiftPorts$fLiftImageAlias$fLiftBaseImage$fLiftInstruction$fLiftInstructionPos$fLiftSourcePath$fLiftTargetPath $fLiftChown$fLiftCopySource$fLiftCopyArgs $fLiftAddArgs$fLiftDuration $fLiftRetries$fLiftCheckArgs $fLiftCheck edockerfile edockerfileE dockerfileEappendLnIfMissing dockerIgnoreaddGlobcopyGlob stackBuild stackBuild'nodejsnodejs'NormalizedLineContinueJoinedGHC.BaseStringversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName