mirror of
https://github.com/seanhess/hyperbole.git
synced 2024-10-04 00:49:03 +03:00
Haskell interactive serverside web framework inspired by HTMX
bin | ||
client | ||
example | ||
src/Web | ||
test | ||
.gitignore | ||
.hlint.yaml | ||
cabal.project | ||
CHANGELOG.md | ||
fourmolu.yaml | ||
hyperbole.cabal | ||
LICENSE | ||
package-lock.json | ||
package.yaml | ||
README.md |
Hyperbole
Create fully interactive HTML applications with type-safe serverside Haskell. Inspired by HTMX, Elm, and Phoenix LiveView
Learn more about Hyperbole on Hackage
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
main = do
run 3000 $ do
liveApp (basicDocument "Example") (page mainPage)
mainPage = do
handle message
load $ do
pure $ do
el bold "My Page"
hyper (Message 1) $ messageView "Hello"
hyper (Message 2) $ messageView "World!"
data Message = Message Int
deriving (Generic, Param)
data MessageAction = Louder Text
deriving (Generic, Param)
instance HyperView Message where
type Action Message = MessageAction
message :: Message -> MessageAction -> Eff es (View Message ())
message _ (Louder m) = do
let new = m <> "!"
pure $ messageView new
messageView m = do
el_ $ text m
button (Louder m) id "Louder"
Examples
The example directory contains an app with pages demonstrating different features
Run the examples in this repo using cabal. Then visit http://localhost:3000/ in your browser
cabal run
- Main
- Simple
- Counter
- CSS Transitions
- Forms
- Sessions
- Redirects
- Lazy Loading and Polling
- Errors
- Contacts (Advanced)