tightrope alternatives and similar packages
Based on the "Web" category.
Alternatively, view tightrope alternatives based on common mentions on social networks and blogs.
-
scotty
Haskell web framework inspired by Ruby's Sinatra, using WAI and Warp (Official Repository) -
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. -
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. -
servant
Main repository for the servant libraries — DSL for describing, serving, querying, mocking, documenting web applications and more! -
neuron
Future-proof note-taking and publishing based on Zettelkasten (superseded by Emanote: https://github.com/srid/emanote) -
airship
Helium + Webmachine = Airship. A toolkit for building declarative, RESTful web apps. -
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 -
hbro
[Unmaintained] A minimal web-browser written and configured in Haskell. -
servant-elm
Automatically derive Elm functions to query servant webservices -
tagsoup
Haskell library for parsing and extracting information from (possibly malformed) HTML/XML documents -
kubernetes-client-core
Haskell client for the kubernetes API. A work in progress. -
backprop
Heterogeneous automatic differentiation ("backpropagation") in Haskell -
engine-io
A Haskell server implementation of the Engine.IO and Socket.IO (1.0) protocols -
keera-hails-reactive-htmldom
Keera Hails: Haskell on Rails - Reactive Programming Framework for Interactive Haskell applications -
ghcjs-dom
Make Document Object Model (DOM) apps that run in any browser and natively using WebKitGtk -
android-lint-summary
Prettier display of Android Lint issues
Access the most powerful time series database as a service
* 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 tightrope or a related project?
README
Tightrope is a library that makes writing Slash commands easier.
You give it a function that turns a Command
into a Text
response, and it gives you a WAI application that you can hand to Warp (or any other WAI-compatible server).
You need to give it an incoming-webhook token in order to use the say
command. You can pass in the empty string if you're writing a bot that only needs to communicate with the user who initiated the slash command.
Usage
Here's a simple echo bot:
import Network.Tightrope
import Network.Wai.Handler.Warp (run)
main :: IO ()
main = do
-- we don't want to keep our token in source control
token <- readFile "token"
-- change this, of course
let url = "https://company.slack.com/services/hooks/incoming-webhook"
port = 4000
echobot = bot (Account token url) echo
putStrLn $ "Running on port " ++ show port
Warp.run port echobot
echo :: Command -> Slack Text
echo command = do
-- `say` will broadcast a message to everyone in the specified room,
-- or to one person (if you you `say` to a private room).
-- You can `say` as many times as you want, to whatever room you like.
-- But here we're just gonna post a message to the room the request
-- came in on.
let msg = message (Icon "ghost") "Echobot" (command ^. text)
say msg (command ^. source)
return "echoing, be patient..."
-- Only the user who typed "/echo" will see the return value, and
-- it isn't persistent. It'll disappear the next time they refresh
-- slack. Use `say` if you want something persistent -- when given
-- a `Private` Room, `say` will send messages from slackbot to the
-- specified user.
Slack
is a MonadIO
, so you can use liftIO
to do any IO operation in the process of handling the request.
What? A monad??
Yes. Here there be monads. Don't be afraid. Monads can smell fear. We can get through this together. I'm there for you.
But what if I don't know Haskell
That's okay! I don't either. But I've been having a lot of fun making bots anyway, and I've picked up a little bit of Haskell along the way.