say alternatives and similar packages
Based on the "Text" category.
Alternatively, view say alternatives based on common mentions on social networks and blogs.
-
skylighting
A Haskell syntax highlighting library with tokenizers derived from KDE syntax highlighting descriptions -
double-conversion
A fast Haskell library for converting between double precision floating point numbers and text strings. It is implemented as a binding to the V8-derived C++ double-conversion library.
SaaSHub - Software Alternatives and Reviews
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of say or a related project?
README
say
Send textual messages to a Handle
in a thread-friendly way.
The motivation for this package is described in a blog post on Haskell's
Missing Concurrency
Basics.
The simple explanation is, when writing a line of textual data to a Handle
-
such as sending some messages t o ther terminal - we'd like to have the
following properties:
- Properly handle character encoding settings on the
Handle
- For reasonably sized messages, ensure that the entire message is written in
one chunk to avoid interleaving data with other threads
- This includes the trailing newline character
- Avoid unnecessary memory allocations and copies
- Minimize locking
- Provide a simple API
On the last point: for the most part, you can make the following substitutions in your API usage:
- Replace
putStrLn
withsay
- Replace
print
withsayShow
- If you're using a
String
instead ofText
, replaceputStrLn
withsayString
In addition, sayErr
, sayErrString
and sayErrShow
work on
standard error instead, and hSay
, hSayString
and hSayShow
work
on arbitrary Handle
s.
#!/usr/bin/env stack
-- stack --install-ghc --resolver lts-6.23 runghc --package async --package say
import Control.Concurrent.Async (mapConcurrently)
import Control.Monad (forM_, void)
import Say (sayString)
worker :: Int -> IO ()
worker ident = forM_ [1..1000] $ \msg -> sayString $ concat
[ "Hello, I am worker #"
, show ident
, ", and this is message #"
, show msg
]
main :: IO ()
main = void $ mapConcurrently worker [1..100]