This file is indexed.

/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'>&lt;/&gt;</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'>=&gt;</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'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Handle</span> <span class='hs-keyglyph'>-&gt;</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'>-&gt;</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'>&gt;&gt;=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>tmpDir</span> <span class='hs-keyglyph'>-&gt;</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'>=&gt;</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'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-&gt;</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'>-&gt;</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'>&gt;&gt;=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>tmpDir</span> <span class='hs-keyglyph'>-&gt;</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'>=&gt;</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'>-&gt;</span> <span class='hs-conid'>String</span>   <span class='hs-comment'>-- ^ File name template</span>
<a name="line-87"></a>             <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Handle</span> <span class='hs-keyglyph'>-&gt;</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'>-&gt;</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'>-&gt;</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'>&gt;&gt;</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'>=&gt;</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'>-&gt;</span> <span class='hs-conid'>String</span>   <span class='hs-comment'>-- ^ Directory name template</span>
<a name="line-101"></a>                  <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-&gt;</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'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>String</span>      <span class='hs-comment'>-- ^ File name template</span>
<a name="line-115"></a>              <span class='hs-keyglyph'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</span> <span class='hs-varid'>hPutStr</span> <span class='hs-varid'>handle</span> <span class='hs-varid'>content</span> <span class='hs-varop'>&gt;&gt;</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'>-&gt;</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'>-&gt;</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'>&gt;&gt;=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>tmpDir</span> <span class='hs-keyglyph'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>String</span>      <span class='hs-comment'>-- ^ File name template</span>
<a name="line-137"></a>              <span class='hs-keyglyph'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>&gt;&gt;=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>tmpDir</span> <span class='hs-keyglyph'>-&gt;</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'>=&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>()</span> <span class='hs-keyglyph'>-&gt;</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'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ Directory name template</span>
<a name="line-166"></a>  <span class='hs-keyglyph'>-&gt;</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'>&lt;-</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'>&lt;/&gt;</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'>&lt;-</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-- &gt;&gt;&gt; setCurrentDirectory "/home/feuerbach/"</span>
<a name="line-190"></a><span class='hs-comment'>-- &gt;&gt;&gt; setEnv "TMPDIR" "."</span>
<a name="line-191"></a><span class='hs-comment'>-- &gt;&gt;&gt; getTemporaryDirectory</span>
<a name="line-192"></a><span class='hs-comment'>-- "."</span>
<a name="line-193"></a><span class='hs-comment'>-- &gt;&gt;&gt; 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'>&gt;&gt;=</span> <span class='hs-varid'>canonicalizePath</span>
</pre></body>
</html>