/usr/share/doc/libghc-temporary-doc/html/src/System-IO-Temp.html is in libghc-temporary-doc 1.2.1.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 | <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
<title>System/IO/Temp.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE CPP #-}</span>
<a name="line-2"></a><span class='hs-comment'>-- | Functions to create temporary files and directories.</span>
<a name="line-3"></a><span class='hs-comment'>--</span>
<a name="line-4"></a><span class='hs-comment'>-- Most functions come in two flavours: those that create files/directories</span>
<a name="line-5"></a><span class='hs-comment'>-- under the system standard temporary directory and those that use the</span>
<a name="line-6"></a><span class='hs-comment'>-- user-supplied directory.</span>
<a name="line-7"></a><span class='hs-comment'>--</span>
<a name="line-8"></a><span class='hs-comment'>-- The functions that create files/directories under the system standard</span>
<a name="line-9"></a><span class='hs-comment'>-- temporary directory will return canonical absolute paths (see</span>
<a name="line-10"></a><span class='hs-comment'>-- 'getCanonicalTemporaryDirectory'). The functions use the user-supplied</span>
<a name="line-11"></a><span class='hs-comment'>-- directory do not canonicalize the returned path.</span>
<a name="line-12"></a><span class='hs-comment'>--</span>
<a name="line-13"></a><span class='hs-comment'>-- The action inside 'withTempFile' or 'withTempDirectory' is allowed to</span>
<a name="line-14"></a><span class='hs-comment'>-- remove the temporary file/directory if it needs to.</span>
<a name="line-15"></a><span class='hs-comment'>--</span>
<a name="line-16"></a><span class='hs-comment'>-- == Templates and file names</span>
<a name="line-17"></a><span class='hs-comment'>--</span>
<a name="line-18"></a><span class='hs-comment'>-- The treatment of templates differs somewhat for files vs directories.</span>
<a name="line-19"></a><span class='hs-comment'>--</span>
<a name="line-20"></a><span class='hs-comment'>-- For files, the template has form @name.ext@, and a random number will be</span>
<a name="line-21"></a><span class='hs-comment'>-- placed between between the name and the extension to yield a unique file</span>
<a name="line-22"></a><span class='hs-comment'>-- name, e.g. @name1804289383846930886.ext@.</span>
<a name="line-23"></a><span class='hs-comment'>--</span>
<a name="line-24"></a><span class='hs-comment'>-- For directories, no extension is recognized, so a number will be simply</span>
<a name="line-25"></a><span class='hs-comment'>-- appended to the end of the template. Moreover, the number will be</span>
<a name="line-26"></a><span class='hs-comment'>-- smaller, as it is derived from the current process's PID</span>
<a name="line-27"></a><span class='hs-comment'>-- (but the result is still a unique directory name). So, for instance,</span>
<a name="line-28"></a><span class='hs-comment'>-- the directory template @dir@ may result in a directory named @dir30112@.</span>
<a name="line-29"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-conid'>Temp</span> <span class='hs-layout'>(</span>
<a name="line-30"></a> <span class='hs-varid'>withSystemTempFile</span><span class='hs-layout'>,</span> <span class='hs-varid'>withSystemTempDirectory</span><span class='hs-layout'>,</span>
<a name="line-31"></a> <span class='hs-varid'>withTempFile</span><span class='hs-layout'>,</span> <span class='hs-varid'>withTempDirectory</span><span class='hs-layout'>,</span>
<a name="line-32"></a> <span class='hs-varid'>openNewBinaryFile</span><span class='hs-layout'>,</span>
<a name="line-33"></a> <span class='hs-varid'>createTempDirectory</span><span class='hs-layout'>,</span>
<a name="line-34"></a> <span class='hs-varid'>writeTempFile</span><span class='hs-layout'>,</span> <span class='hs-varid'>writeSystemTempFile</span><span class='hs-layout'>,</span>
<a name="line-35"></a> <span class='hs-varid'>emptyTempFile</span><span class='hs-layout'>,</span> <span class='hs-varid'>emptySystemTempFile</span><span class='hs-layout'>,</span>
<a name="line-36"></a> <span class='hs-comment'>-- * Re-exports from System.IO</span>
<a name="line-37"></a> <span class='hs-varid'>openTempFile</span><span class='hs-layout'>,</span>
<a name="line-38"></a> <span class='hs-varid'>openBinaryTempFile</span><span class='hs-layout'>,</span>
<a name="line-39"></a> <span class='hs-comment'>-- * Auxiliary functions</span>
<a name="line-40"></a> <span class='hs-varid'>getCanonicalTemporaryDirectory</span>
<a name="line-41"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-42"></a>
<a name="line-43"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Catch</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>MC</span>
<a name="line-44"></a>
<a name="line-45"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-conid'>Class</span>
<a name="line-46"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>Directory</span>
<a name="line-47"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Handle</span><span class='hs-layout'>,</span> <span class='hs-varid'>hClose</span><span class='hs-layout'>,</span> <span class='hs-varid'>openTempFile</span><span class='hs-layout'>,</span> <span class='hs-varid'>openBinaryTempFile</span><span class='hs-layout'>,</span>
<a name="line-48"></a> <span class='hs-varid'>openBinaryTempFileWithDefaultPermissions</span><span class='hs-layout'>,</span> <span class='hs-varid'>hPutStr</span><span class='hs-layout'>)</span>
<a name="line-49"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-conid'>Error</span> <span class='hs-layout'>(</span><span class='hs-varid'>isAlreadyExistsError</span><span class='hs-layout'>)</span>
<a name="line-50"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>Posix</span><span class='hs-varop'>.</span><span class='hs-conid'>Internals</span> <span class='hs-layout'>(</span><span class='hs-varid'>c_getpid</span><span class='hs-layout'>)</span>
<a name="line-51"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>FilePath</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varop'></></span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-52"></a><span class='hs-cpp'>#ifdef mingw32_HOST_OS</span>
<a name="line-53"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>Directory</span> <span class='hs-layout'>(</span> <span class='hs-varid'>createDirectory</span> <span class='hs-layout'>)</span>
<a name="line-54"></a><span class='hs-cpp'>#else</span>
<a name="line-55"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>Posix</span>
<a name="line-56"></a><span class='hs-cpp'>#endif</span>
<a name="line-57"></a>
<a name="line-58"></a><a name="withSystemTempFile"></a><span class='hs-comment'>-- | Create, open, and use a temporary file in the system standard temporary directory.</span>
<a name="line-59"></a><span class='hs-comment'>--</span>
<a name="line-60"></a><span class='hs-comment'>-- The temp file is deleted after use.</span>
<a name="line-61"></a><span class='hs-comment'>--</span>
<a name="line-62"></a><span class='hs-comment'>-- Behaves exactly the same as 'withTempFile', except that the parent temporary directory</span>
<a name="line-63"></a><span class='hs-comment'>-- will be that returned by 'getCanonicalTemporaryDirectory'.</span>
<a name="line-64"></a><span class='hs-definition'>withSystemTempFile</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>MC</span><span class='hs-varop'>.</span><span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span>
<a name="line-65"></a> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ File name template</span>
<a name="line-66"></a> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Handle</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^ Callback that can use the file</span>
<a name="line-67"></a> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-68"></a><span class='hs-definition'>withSystemTempFile</span> <span class='hs-varid'>template</span> <span class='hs-varid'>action</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>liftIO</span> <span class='hs-varid'>getCanonicalTemporaryDirectory</span> <span class='hs-varop'>>>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>tmpDir</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>withTempFile</span> <span class='hs-varid'>tmpDir</span> <span class='hs-varid'>template</span> <span class='hs-varid'>action</span>
<a name="line-69"></a>
<a name="line-70"></a><a name="withSystemTempDirectory"></a><span class='hs-comment'>-- | Create and use a temporary directory in the system standard temporary directory.</span>
<a name="line-71"></a><span class='hs-comment'>--</span>
<a name="line-72"></a><span class='hs-comment'>-- Behaves exactly the same as 'withTempDirectory', except that the parent temporary directory</span>
<a name="line-73"></a><span class='hs-comment'>-- will be that returned by 'getCanonicalTemporaryDirectory'.</span>
<a name="line-74"></a><span class='hs-definition'>withSystemTempDirectory</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>MC</span><span class='hs-varop'>.</span><span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span>
<a name="line-75"></a> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ Directory name template</span>
<a name="line-76"></a> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^ Callback that can use the directory</span>
<a name="line-77"></a> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-78"></a><span class='hs-definition'>withSystemTempDirectory</span> <span class='hs-varid'>template</span> <span class='hs-varid'>action</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>liftIO</span> <span class='hs-varid'>getCanonicalTemporaryDirectory</span> <span class='hs-varop'>>>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>tmpDir</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>withTempDirectory</span> <span class='hs-varid'>tmpDir</span> <span class='hs-varid'>template</span> <span class='hs-varid'>action</span>
<a name="line-79"></a>
<a name="line-80"></a>
<a name="line-81"></a><a name="withTempFile"></a><span class='hs-comment'>-- | Create, open, and use a temporary file in the given directory.</span>
<a name="line-82"></a><span class='hs-comment'>--</span>
<a name="line-83"></a><span class='hs-comment'>-- The temp file is deleted after use.</span>
<a name="line-84"></a><span class='hs-definition'>withTempFile</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>MC</span><span class='hs-varop'>.</span><span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span>
<a name="line-85"></a> <span class='hs-conid'>FilePath</span> <span class='hs-comment'>-- ^ Parent directory to create the file in</span>
<a name="line-86"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ File name template</span>
<a name="line-87"></a> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Handle</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^ Callback that can use the file</span>
<a name="line-88"></a> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-89"></a><span class='hs-definition'>withTempFile</span> <span class='hs-varid'>tmpDir</span> <span class='hs-varid'>template</span> <span class='hs-varid'>action</span> <span class='hs-keyglyph'>=</span>
<a name="line-90"></a> <span class='hs-conid'>MC</span><span class='hs-varop'>.</span><span class='hs-varid'>bracket</span>
<a name="line-91"></a> <span class='hs-layout'>(</span><span class='hs-varid'>liftIO</span> <span class='hs-layout'>(</span><span class='hs-varid'>openTempFile</span> <span class='hs-varid'>tmpDir</span> <span class='hs-varid'>template</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-92"></a> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-varid'>name</span><span class='hs-layout'>,</span> <span class='hs-varid'>handle</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>liftIO</span> <span class='hs-layout'>(</span><span class='hs-varid'>hClose</span> <span class='hs-varid'>handle</span> <span class='hs-varop'>>></span> <span class='hs-varid'>ignoringIOErrors</span> <span class='hs-layout'>(</span><span class='hs-varid'>removeFile</span> <span class='hs-varid'>name</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-93"></a> <span class='hs-layout'>(</span><span class='hs-varid'>uncurry</span> <span class='hs-varid'>action</span><span class='hs-layout'>)</span>
<a name="line-94"></a>
<a name="line-95"></a><a name="withTempDirectory"></a><span class='hs-comment'>-- | Create and use a temporary directory inside the given directory.</span>
<a name="line-96"></a><span class='hs-comment'>--</span>
<a name="line-97"></a><span class='hs-comment'>-- The directory is deleted after use.</span>
<a name="line-98"></a><span class='hs-definition'>withTempDirectory</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MC</span><span class='hs-varop'>.</span><span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span>
<a name="line-99"></a> <span class='hs-conid'>FilePath</span> <span class='hs-comment'>-- ^ Parent directory to create the directory in</span>
<a name="line-100"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ Directory name template</span>
<a name="line-101"></a> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^ Callback that can use the directory</span>
<a name="line-102"></a> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-103"></a><span class='hs-definition'>withTempDirectory</span> <span class='hs-varid'>targetDir</span> <span class='hs-varid'>template</span> <span class='hs-keyglyph'>=</span>
<a name="line-104"></a> <span class='hs-conid'>MC</span><span class='hs-varop'>.</span><span class='hs-varid'>bracket</span>
<a name="line-105"></a> <span class='hs-layout'>(</span><span class='hs-varid'>liftIO</span> <span class='hs-layout'>(</span><span class='hs-varid'>createTempDirectory</span> <span class='hs-varid'>targetDir</span> <span class='hs-varid'>template</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-106"></a> <span class='hs-layout'>(</span><span class='hs-varid'>liftIO</span> <span class='hs-varop'>.</span> <span class='hs-varid'>ignoringIOErrors</span> <span class='hs-varop'>.</span> <span class='hs-varid'>removeDirectoryRecursive</span><span class='hs-layout'>)</span>
<a name="line-107"></a>
<a name="line-108"></a><a name="writeTempFile"></a><span class='hs-comment'>-- | Create a unique new file, write (text mode) a given data string to it,</span>
<a name="line-109"></a><span class='hs-comment'>-- and close the handle again. The file will not be deleted automatically,</span>
<a name="line-110"></a><span class='hs-comment'>-- and only the current user will have permission to access the file.</span>
<a name="line-111"></a><span class='hs-comment'>--</span>
<a name="line-112"></a><span class='hs-comment'>-- @since 1.2.1</span>
<a name="line-113"></a><span class='hs-definition'>writeTempFile</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FilePath</span> <span class='hs-comment'>-- ^ Parent directory to create the file in</span>
<a name="line-114"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ File name template</span>
<a name="line-115"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ Data to store in the file</span>
<a name="line-116"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>FilePath</span> <span class='hs-comment'>-- ^ Path to the (written and closed) file</span>
<a name="line-117"></a><span class='hs-definition'>writeTempFile</span> <span class='hs-varid'>targetDir</span> <span class='hs-varid'>template</span> <span class='hs-varid'>content</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MC</span><span class='hs-varop'>.</span><span class='hs-varid'>bracket</span>
<a name="line-118"></a> <span class='hs-layout'>(</span><span class='hs-varid'>openTempFile</span> <span class='hs-varid'>targetDir</span> <span class='hs-varid'>template</span><span class='hs-layout'>)</span>
<a name="line-119"></a> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-varid'>handle</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>hClose</span> <span class='hs-varid'>handle</span><span class='hs-layout'>)</span>
<a name="line-120"></a> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-varid'>filePath</span><span class='hs-layout'>,</span> <span class='hs-varid'>handle</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>hPutStr</span> <span class='hs-varid'>handle</span> <span class='hs-varid'>content</span> <span class='hs-varop'>>></span> <span class='hs-varid'>return</span> <span class='hs-varid'>filePath</span><span class='hs-layout'>)</span>
<a name="line-121"></a>
<a name="line-122"></a><a name="writeSystemTempFile"></a><span class='hs-comment'>-- | Like 'writeTempFile', but use the system directory for temporary files.</span>
<a name="line-123"></a><span class='hs-comment'>--</span>
<a name="line-124"></a><span class='hs-comment'>-- @since 1.2.1</span>
<a name="line-125"></a><span class='hs-definition'>writeSystemTempFile</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ File name template</span>
<a name="line-126"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ Data to store in the file</span>
<a name="line-127"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>FilePath</span> <span class='hs-comment'>-- ^ Path to the (written and closed) file</span>
<a name="line-128"></a><span class='hs-definition'>writeSystemTempFile</span> <span class='hs-varid'>template</span> <span class='hs-varid'>content</span>
<a name="line-129"></a> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getCanonicalTemporaryDirectory</span> <span class='hs-varop'>>>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>tmpDir</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>writeTempFile</span> <span class='hs-varid'>tmpDir</span> <span class='hs-varid'>template</span> <span class='hs-varid'>content</span>
<a name="line-130"></a>
<a name="line-131"></a><a name="emptyTempFile"></a><span class='hs-comment'>-- | Create a unique new empty file. (Equivalent to 'writeTempFile' with empty data string.)</span>
<a name="line-132"></a><span class='hs-comment'>-- This is useful if the actual content is provided by an external process.</span>
<a name="line-133"></a><span class='hs-comment'>--</span>
<a name="line-134"></a><span class='hs-comment'>-- @since 1.2.1</span>
<a name="line-135"></a><span class='hs-definition'>emptyTempFile</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FilePath</span> <span class='hs-comment'>-- ^ Parent directory to create the file in</span>
<a name="line-136"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ File name template</span>
<a name="line-137"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>FilePath</span> <span class='hs-comment'>-- ^ Path to the (written and closed) file</span>
<a name="line-138"></a><span class='hs-definition'>emptyTempFile</span> <span class='hs-varid'>targetDir</span> <span class='hs-varid'>template</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MC</span><span class='hs-varop'>.</span><span class='hs-varid'>bracket</span>
<a name="line-139"></a> <span class='hs-layout'>(</span><span class='hs-varid'>openTempFile</span> <span class='hs-varid'>targetDir</span> <span class='hs-varid'>template</span><span class='hs-layout'>)</span>
<a name="line-140"></a> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-varid'>handle</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>hClose</span> <span class='hs-varid'>handle</span><span class='hs-layout'>)</span>
<a name="line-141"></a> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-varid'>filePath</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-varid'>filePath</span><span class='hs-layout'>)</span>
<a name="line-142"></a>
<a name="line-143"></a><a name="emptySystemTempFile"></a><span class='hs-comment'>-- | Like 'emptyTempFile', but use the system directory for temporary files.</span>
<a name="line-144"></a><span class='hs-comment'>--</span>
<a name="line-145"></a><span class='hs-comment'>-- @since 1.2.1</span>
<a name="line-146"></a><span class='hs-definition'>emptySystemTempFile</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ File name template</span>
<a name="line-147"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>FilePath</span> <span class='hs-comment'>-- ^ Path to the (written and closed) file</span>
<a name="line-148"></a><span class='hs-definition'>emptySystemTempFile</span> <span class='hs-varid'>template</span>
<a name="line-149"></a> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getCanonicalTemporaryDirectory</span> <span class='hs-varop'>>>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>tmpDir</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>emptyTempFile</span> <span class='hs-varid'>tmpDir</span> <span class='hs-varid'>template</span>
<a name="line-150"></a>
<a name="line-151"></a>
<a name="line-152"></a><a name="ignoringIOErrors"></a><span class='hs-definition'>ignoringIOErrors</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MC</span><span class='hs-varop'>.</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-conid'>()</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-conid'>()</span>
<a name="line-153"></a><span class='hs-definition'>ignoringIOErrors</span> <span class='hs-varid'>ioe</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ioe</span> <span class='hs-varop'>`</span><span class='hs-conid'>MC</span><span class='hs-varop'>.</span><span class='hs-varid'>catch</span><span class='hs-varop'>`</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>const</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-154"></a>
<a name="line-155"></a><a name="openNewBinaryFile"></a><span class='hs-comment'>-- | Like 'openBinaryTempFile', but uses 666 rather than 600 for the</span>
<a name="line-156"></a><span class='hs-comment'>-- permissions.</span>
<a name="line-157"></a><span class='hs-comment'>--</span>
<a name="line-158"></a><span class='hs-comment'>-- Equivalent to 'openBinaryTempFileWithDefaultPermissions'.</span>
<a name="line-159"></a><span class='hs-definition'>openNewBinaryFile</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>FilePath</span><span class='hs-layout'>,</span> <span class='hs-conid'>Handle</span><span class='hs-layout'>)</span>
<a name="line-160"></a><span class='hs-definition'>openNewBinaryFile</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>openBinaryTempFileWithDefaultPermissions</span>
<a name="line-161"></a>
<a name="line-162"></a><a name="createTempDirectory"></a><span class='hs-comment'>-- | Create a temporary directory.</span>
<a name="line-163"></a><span class='hs-definition'>createTempDirectory</span>
<a name="line-164"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FilePath</span> <span class='hs-comment'>-- ^ Parent directory to create the directory in</span>
<a name="line-165"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ Directory name template</span>
<a name="line-166"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>FilePath</span>
<a name="line-167"></a><span class='hs-definition'>createTempDirectory</span> <span class='hs-varid'>dir</span> <span class='hs-varid'>template</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-168"></a> <span class='hs-varid'>pid</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>c_getpid</span>
<a name="line-169"></a> <span class='hs-varid'>findTempName</span> <span class='hs-varid'>pid</span>
<a name="line-170"></a> <span class='hs-keyword'>where</span>
<a name="line-171"></a> <span class='hs-varid'>findTempName</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-172"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>dirpath</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>dir</span> <span class='hs-varop'></></span> <span class='hs-varid'>template</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-varid'>x</span>
<a name="line-173"></a> <span class='hs-varid'>r</span> <span class='hs-keyglyph'><-</span> <span class='hs-conid'>MC</span><span class='hs-varop'>.</span><span class='hs-varid'>try</span> <span class='hs-varop'>$</span> <span class='hs-varid'>mkPrivateDir</span> <span class='hs-varid'>dirpath</span>
<a name="line-174"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>r</span> <span class='hs-keyword'>of</span>
<a name="line-175"></a> <span class='hs-conid'>Right</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-varid'>dirpath</span>
<a name="line-176"></a> <span class='hs-conid'>Left</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>isAlreadyExistsError</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>findTempName</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-varop'>+</span><span class='hs-num'>1</span><span class='hs-layout'>)</span>
<a name="line-177"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>ioError</span> <span class='hs-varid'>e</span>
<a name="line-178"></a>
<a name="line-179"></a><a name="mkPrivateDir"></a><span class='hs-definition'>mkPrivateDir</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-180"></a><span class='hs-cpp'>#ifdef mingw32_HOST_OS</span>
<a name="line-181"></a><span class='hs-definition'>mkPrivateDir</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>createDirectory</span> <span class='hs-varid'>s</span>
<a name="line-182"></a><span class='hs-cpp'>#else</span>
<a name="line-183"></a><span class='hs-definition'>mkPrivateDir</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>Posix</span><span class='hs-varop'>.</span><span class='hs-varid'>createDirectory</span> <span class='hs-varid'>s</span> <span class='hs-num'>0o700</span>
<a name="line-184"></a><span class='hs-cpp'>#endif</span>
<a name="line-185"></a>
<a name="line-186"></a><a name="getCanonicalTemporaryDirectory"></a><span class='hs-comment'>-- | Return the absolute and canonical path to the system temporary</span>
<a name="line-187"></a><span class='hs-comment'>-- directory.</span>
<a name="line-188"></a><span class='hs-comment'>--</span>
<a name="line-189"></a><span class='hs-comment'>-- >>> setCurrentDirectory "/home/feuerbach/"</span>
<a name="line-190"></a><span class='hs-comment'>-- >>> setEnv "TMPDIR" "."</span>
<a name="line-191"></a><span class='hs-comment'>-- >>> getTemporaryDirectory</span>
<a name="line-192"></a><span class='hs-comment'>-- "."</span>
<a name="line-193"></a><span class='hs-comment'>-- >>> getCanonicalTemporaryDirectory</span>
<a name="line-194"></a><span class='hs-comment'>-- "/home/feuerbach"</span>
<a name="line-195"></a><span class='hs-definition'>getCanonicalTemporaryDirectory</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>FilePath</span>
<a name="line-196"></a><span class='hs-definition'>getCanonicalTemporaryDirectory</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getTemporaryDirectory</span> <span class='hs-varop'>>>=</span> <span class='hs-varid'>canonicalizePath</span>
</pre></body>
</html>
|