alexmingoia/twain

Tiny web application framework for WAI.

Haskell

73

38 commits

updated Nov 5, 2024

See the code

README

Twain

Hackage BSD3 License

Twain is a tiny web application framework for WAI.

  • ResponderM for composing responses with do notation.
  • Routing with path captures that decompose ResponderM into middleware.
  • Parameter parsing from cookies, path, query, and body.
  • Helpers for redirects, headers, status codes, and errors.
{-# language OverloadedStrings #-}

import Network.Wai.Handler.Warp (run)
import Web.Twain

main :: IO ()
main = do
  run 8080 $
    foldr ($) (notFound missing) routes

routes :: [Middleware]
routes =
  [ get "/" index
  , post "/echo/:name" echoName
  ]

index :: ResponderM a
index = send $ html "Hello World!"

echoName :: ResponderM a
echoName = do
  name <- param "name"
  send $ html $ "Hello, " <> name

missing :: ResponderM a
missing = send $ html "Not found..."
framework
haskell
web
webapp-framework
web-framework

Contributors

alexmingoia

30 commits

soupi

5 commits

kodeFant

1 commits

pdobsan

1 commits

alexmingoia/twain

Tiny web application framework for WAI.

Haskell

73

38 commits

updated Nov 5, 2024

See the code

README

Twain

Hackage BSD3 License

Twain is a tiny web application framework for WAI.

  • ResponderM for composing responses with do notation.
  • Routing with path captures that decompose ResponderM into middleware.
  • Parameter parsing from cookies, path, query, and body.
  • Helpers for redirects, headers, status codes, and errors.
{-# language OverloadedStrings #-}

import Network.Wai.Handler.Warp (run)
import Web.Twain

main :: IO ()
main = do
  run 8080 $
    foldr ($) (notFound missing) routes

routes :: [Middleware]
routes =
  [ get "/" index
  , post "/echo/:name" echoName
  ]

index :: ResponderM a
index = send $ html "Hello World!"

echoName :: ResponderM a
echoName = do
  name <- param "name"
  send $ html $ "Hello, " <> name

missing :: ResponderM a
missing = send $ html "Not found..."
framework
haskell
web
webapp-framework
web-framework

Contributors

alexmingoia

30 commits

soupi

5 commits

kodeFant

1 commits

pdobsan

1 commits

Languages

Haskell

100.0%