Skip to content

Commit

Permalink
Merge pull request #39 from BarbDMC/example/add-basic-usage
Browse files Browse the repository at this point in the history
Add basic usage example
  • Loading branch information
BarbDMC authored Nov 13, 2023
2 parents 75180f7 + 2cb5f7e commit 8c7dc96
Show file tree
Hide file tree
Showing 9 changed files with 204 additions and 0 deletions.
2 changes: 2 additions & 0 deletions examples/logger/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.stack-work/
*~
21 changes: 21 additions & 0 deletions examples/logger/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# logger-example

This Haskell code example demonstrates a basic logging simulation.

It emulates a logging operation that sequentially generates a set of log messages. Within a loop, it prints messages to the console, ranging from "Log message 1" to "Log message 5". Each message is printed alongside a confirmation that it has been logged, with a 1-second delay between messages.

Upon reaching "Log message 5", the process shifts from console output to writing this message into a log file.


## How to use this example

### Required dependencies

- atomic-write
- text
- filepath


### Run Example

- Use the command: `stack run`
2 changes: 2 additions & 0 deletions examples/logger/Setup.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import Distribution.Simple
main = defaultMain
1 change: 1 addition & 0 deletions examples/logger/app.log
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Log message 5
30 changes: 30 additions & 0 deletions examples/logger/app/Main.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import System.AtomicWrite.Writer.Text
import qualified Data.Text as T
import qualified Data.Text.IO as TIO
import Control.Monad (forM_)
import Control.Concurrent (forkIO, threadDelay)

logFilePath :: FilePath
logFilePath = "app.log"

logMessage :: FilePath -> T.Text -> IO ()
logMessage logFile message = atomicWriteFile logFile message

simulateLoggingProcess :: FilePath -> IO ()
simulateLoggingProcess logFile = do
forM_ [1..10 :: Int] $ \i -> do
let message = "Log message " <> show i
logMessage logFile (T.pack message)
putStrLn $ "Logged: " <> message
threadDelay 1000000

main :: IO ()
main = do
TIO.writeFile logFilePath mempty

_ <- forkIO (simulateLoggingProcess logFilePath)

threadDelay 5000000

putStrLn "Log file contents: "
TIO.readFile logFilePath >>= TIO.putStrLn
76 changes: 76 additions & 0 deletions examples/logger/logger-example.cabal
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
cabal-version: 2.2

-- This file has been generated from package.yaml by hpack version 0.36.0.
--
-- see: https://github.com/sol/hpack

name: logger-example
version: 0.1.0.0
description: Please see the README on GitHub at <https://github.com/githubuser/logger-example#readme>
homepage: https://github.com/githubuser/logger-example#readme
bug-reports: https://github.com/githubuser/logger-example/issues
author: Author name here
maintainer: [email protected]
copyright: 2023 Author name here
license: BSD-3-Clause
license-file: LICENSE
build-type: Simple
extra-source-files:
README.md
CHANGELOG.md

source-repository head
type: git
location: https://github.com/githubuser/logger-example

library
exposed-modules:
Lib
other-modules:
Paths_logger_example
autogen-modules:
Paths_logger_example
hs-source-dirs:
src
ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints
build-depends:
atomic-write >=0.2
, base >=4.7 && <5
, filepath >=1.4 && <2
, text >=2.0
default-language: Haskell2010

executable logger-example-exe
main-is: Main.hs
other-modules:
Paths_logger_example
autogen-modules:
Paths_logger_example
hs-source-dirs:
app
ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N
build-depends:
atomic-write >=0.2
, base >=4.7 && <5
, filepath >=1.4 && <2
, logger-example
, text >=2.0
default-language: Haskell2010

test-suite logger-example-test
type: exitcode-stdio-1.0
main-is: Spec.hs
other-modules:
Paths_logger_example
autogen-modules:
Paths_logger_example
hs-source-dirs:
test
ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N
build-depends:
atomic-write >=0.2
, base >=4.7 && <5
, filepath >=1.4 && <2
, logger-example
, text >=2.0
default-language: Haskell2010
52 changes: 52 additions & 0 deletions examples/logger/package.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: logger-example
version: 0.1.0.0
github: "stackbuilders/atomic-write"
license: BSD-3-Clause
author: "@BarbDMC"
maintainer: "[email protected]"
copyright: "2023 @BarbDMC"

extra-source-files:
- README.md
- CHANGELOG.md

# Metadata used when publishing your package
# synopsis: Short description of your package
# category: Web

# To avoid duplicated efforts in documentation and dealing with the
# complications of embedding Haddock markup inside cabal files, it is
# common to point users to the README.md file.
description: Please see the README on GitHub at <https://github.com/githubuser/logger-example#readme>

dependencies:
- base >= 4.7 && < 5
- atomic-write >= 0.2
- text >= 2.0
- filepath >= 1.4 && < 2

ghc-options:
- -Wall
- -Wcompat
- -Widentities
- -Wincomplete-record-updates
- -Wincomplete-uni-patterns
- -Wmissing-export-lists
- -Wmissing-home-modules
- -Wpartial-fields
- -Wredundant-constraints

library:
source-dirs: src

executables:
logger-example-exe:
main: Main.hs
source-dirs: app
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- logger-example

7 changes: 7 additions & 0 deletions examples/logger/stack.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@

resolver:
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/19.yaml


packages:
- .
13 changes: 13 additions & 0 deletions examples/logger/stack.yaml.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# This file was autogenerated by Stack.
# You should not edit this file by hand.
# For more information, please see the documentation at:
# https://docs.haskellstack.org/en/stable/lock_files

packages: []
snapshots:
- completed:
sha256: fb482b8e2d5d061cdda4ba1da2957c012740c893a5ee1c1b99001adae7b1fbe7
size: 640046
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/19.yaml
original:
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/19.yaml

0 comments on commit 8c7dc96

Please sign in to comment.