Temporary Files And Directories in PureScript

module Main where

import Effect.Console (log)
import Effect (Effect)

main :: Effect Unit
main = do
  -- Create a temporary file
  tempFile <- createTempFile "" "sample"
  log $ "Temp file name: " <> tempFile.name

  -- Clean up the file after we're done
  liftEffect $ deleteFile tempFile.name

  -- Write some data to the file
  liftEffect $ writeFile tempFile.name [1, 2, 3, 4]

  -- Create a temporary directory
  tempDir <- createTempDirectory "" "sampledir"
  log $ "Temp dir name: " <> tempDir

  -- Clean up the directory after we're done
  liftEffect $ deleteDirectory tempDir

  -- Create a file in the temporary directory
  let fileName = tempDir <> "/file1"
  liftEffect $ writeFile fileName [1, 2]

where
  createTempFile :: String -> String -> Effect { name :: String }
  createTempFile dir prefix = liftEffect $ unsafePerformEffect do
    -- Simulate temporary file creation
    pure { name: "/tmp/" <> prefix <> "123456" }

  createTempDirectory :: String -> String -> Effect String
  createTempDirectory dir prefix = liftEffect $ unsafePerformEffect do
    -- Simulate temporary directory creation
    pure $ "/tmp/" <> prefix <> "789012"

  deleteFile :: String -> Effect Unit
  deleteFile _ = pure unit

  deleteDirectory :: String -> Effect Unit
  deleteDirectory _ = pure unit

  writeFile :: String -> Array Int -> Effect Unit
  writeFile _ _ = pure unit

This PureScript code demonstrates how to work with temporary files and directories. Here’s an explanation of the key points:

  1. We define a main function that serves as the entry point of our program.

  2. To create a temporary file, we use a createTempFile function. This function takes a directory and a prefix as arguments and returns an Effect containing the file information.

  3. We use log to display the name of the temporary file.

  4. The deleteFile function is used to clean up the temporary file after we’re done. In PureScript, we use liftEffect to lift the Effect into the do block.

  5. We simulate writing data to the file using writeFile.

  6. For creating a temporary directory, we use createTempDirectory. This function returns the name of the created directory.

  7. We use deleteDirectory to clean up the temporary directory.

  8. To create a file in the temporary directory, we concatenate the directory name with the desired file name and use writeFile.

Note that PureScript doesn’t have built-in functions for temporary file and directory operations like Go does. In a real-world scenario, you would need to use a library or FFI to interact with the file system. The functions createTempFile, createTempDirectory, deleteFile, deleteDirectory, and writeFile are placeholders and would need to be implemented properly for actual file system operations.

To run this program:

$ spago run
Temp file name: /tmp/sample123456
Temp dir name: /tmp/sampledir789012

This example demonstrates how to work with temporary files and directories in PureScript, although the actual file system operations are simulated. In a real application, you would use appropriate libraries or FFI to perform these operations.