woot alternatives and similar packages
Based on the "Data" category.
Alternatively, view woot alternatives based on common mentions on social networks and blogs.
-
semantic-source
Parsing, analyzing, and comparing source code across many languages -
text
Haskell library for space- and time-efficient operations over Unicode text. -
code-builder
Packages for defining APIs, running them, generating client code and documentation. -
compendium-client
Mu (μ) is a purely functional framework for building micro services. -
cassava
A CSV parsing and encoding library optimized for ease of use and high performance -
resource-pool
A high-performance striped resource pooling implementation for Haskell -
primitive
This package provides various primitive memory-related operations. -
discrimination
Fast linear time sorting and discrimination for a large class of data types -
reflection
Reifies arbitrary Haskell terms into types that can be reflected back into terms -
dependent-map
Dependently-typed finite maps (partial dependent products) -
dependent-sum
Dependent sums and supporting typeclasses for comparing and displaying them -
streaming
An optimized general monad transformer for streaming applications, with a simple prelude of functions -
orgmode-parse
Attoparsec parser combinators for parsing org-mode structured text! -
text-icu
This package provides the Haskell Data.Text.ICU library, for performing complex manipulation of Unicode text. -
scientific
Arbitrary-precision floating-point numbers represented using scientific notation
Access the most powerful time series database as a service
Do you think we are missing an alternative of woot or a related project?
README
woot
Core library for creating real time collaborative documents without Operational transformation (WOOT). This package provides the core logic and data types for building a server capable and handling real time editing with WOOT.
Real time group editors without Operational transformation
Install
$ stack install woot
Test
stack test
Notes:
- Haskell server is a passive peer in the process
only needs a remote integration function
Example:
Here is a small example of how one would use this library to create a server that keeps an internal WootClient
and updates the client upon request.
Each time the server receives a POST
request with an Operation
in the JSON body, it will apply that operation to a cached WootClient
instance, and then update the cache. This server could easily receive many updates from many other clients, and reliably process the operations.
import Control.Concurrent.STM
import Data.Aeson
import Data.IORef
import Data.Woot
import Network.HTTP.Types.Status
import Network.Wai
import Network.Wai.Handler.Warp
-- ...
-- FromJSON instances for Operation and other necessary types
makeEmptyClient :: IO (IORef WootClient)
makeEmptyClient = newIORef $ makeWootClientEmpty 1
wootApp :: IORef WootClient -> Application
wootApp clientRef req respond = do
body <- requestBody req
let mOperation = decodeStrict body
case mOperation of
Nothing -> return ()
Just operation -> do
client <- readIORef clientRef
let newClient = sendOperation client operation
_ <- writeIORef clientRef newClient
putStrLn $ "Updated Client: " ++ show (wootClientString newClient)
respond $ responseLBS status200 [] "WOOOOT!"
runWootApp :: IO ()
runWootApp = makeEmptyClient >>= run 8000 . wootApp
TODO:
- ci
- docs
- examples