rpc-framework alternatives and similar packages
Based on the "Web" category.
Alternatively, view rpc-framework alternatives based on common mentions on social networks and blogs.
-
yesod-persistent
A RESTful Haskell web framework built on WAI. -
haskell-bitmex-rest
swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition. -
scotty
Haskell web framework inspired by Ruby's Sinatra, using WAI and Warp (Official Repository) -
servant
Main repository for the servant libraries — DSL for describing, serving, querying, mocking, documenting web applications and more! -
swagger-petstore
swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition. -
neuron
Future-proof note-taking and publishing based on Zettelkasten (superseded by Emanote: https://github.com/srid/emanote) -
haskell-kubernetes
Haskell bindings to the Kubernetes API (via swagger-codegen) -
apecs-gloss
a fast, extensible, type driven Haskell ECS framework for games -
digestive-functors
A general way to consume input using applicative functors -
tagsoup
Haskell library for parsing and extracting information from (possibly malformed) HTML/XML documents -
airship
Helium + Webmachine = Airship. A toolkit for building declarative, RESTful web apps. -
hbro
[Unmaintained] A minimal web-browser written and configured in Haskell. -
servant-elm
Automatically derive Elm functions to query servant webservices -
backprop
Heterogeneous automatic differentiation ("backpropagation") in Haskell -
kubernetes-client-core
Haskell client for the kubernetes API. A work in progress. -
keera-hails-reactive-htmldom
Keera Hails: Haskell on Rails - Reactive Programming Framework for Interactive Haskell applications -
ghcjs-base
base library for GHCJS for JavaScript interaction and marshalling, used by higher level libraries like JSC -
telegram-bot-simple
Easy to use library for building Telegram bots in Haskell. -
ghcjs-dom
Make Document Object Model (DOM) apps that run in any browser and natively using WebKitGtk
InfluxDB - Power Real-Time Data Analytics at Scale
* 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 rpc-framework or a related project?
README
rpc-framework
This is a framework for remote procedure calls in haskell.
Features
Usage is incredibly simple!
Calling a remote procedure is type safe.
Modal logic inspired worlds, aka hosts:
- Services run from the World IO monad, written
Host w => WIO w
- This allows world specific actions: if one world will be compiled to JS and one to x86, we could have the following types
- Services run from the World IO monad, written
putStrLn :: IO_World w => WIO w a
installTextBox :: JS_World w => WIO w ()
- Arbitrily complex remote procedures:
- Rather than only being able to call a remote function of one argument, we can call with any number of arguments
foo :: (Sendable a1 ,..., Sendable aN, Sendable b, Host w) => a1 -> ... -> aN -> WIO w b
- It can send pure functions across the wire and now garbage collect them.
instance (Serializable a) => Sendable a a
instance (Sendable a' a, Sendable b b') => Sendable (a -> b) (a' -> IO b')
Only local code can execute
- unlike some modal logic aproaches to mobile languages, the only code that can be executed is the code you compiled, and not code passed from world to world
State can be serialized with references.
Usage
To install, run cabal install
Hosts are declared at the declaration level
$(makeHost "WorldName" "host_location" #portNumber)
Installing a remote service:
makeServices
registers a list of service names which all have the same hostautoService
automatically figures out which services in the given file run on the specified host and registers them. A good usage pattern is to provide all modules with services with a registration hook that can be appended to the main server.
main = runServer $(makeServices [ 'nameOfService1, ... , 'nameOfServiceN])
main = runServer $(autoService 'HostName)
module First where
services = $(autoService 'HostName)
module Second where
services = $(autoService 'HostName)
module Main where
import qualified First as F
import qualified Second as S
main = runServer $ F.services >> S.services
Calling a remote service:
addServer :: Integer -> WIO Server (Integer -> Integer) addServer t = do Server <- world return (t +) getRemoteAdd = $(rpcCall 'addServer) ... ghci> :t getRemoteAdd getRemoteAdd :: Host w => Integer -> WIO w (Integer -> Integer)
Examples
- src/RPCTest.hs is an example.
- It runs two worlds, Client and Server, both on localhost, one on port 9000 and the other on 9001.
- To run and build it:
make run
- To build it:
make test
- To run it after building it:
./rpc-test