mirror of
https://github.com/seanhess/hyperbole.git
synced 2024-10-04 00:49:03 +03:00
85410295d1
Uses type-level lists to enforce handling hyperviews in a page, and for sub-views
58 lines
1.1 KiB
Haskell
58 lines
1.1 KiB
Haskell
module HelloWorld where
|
|
|
|
import Data.Text (Text)
|
|
import Web.Hyperbole
|
|
|
|
|
|
main :: IO ()
|
|
main = do
|
|
run 3000 $ do
|
|
liveApp (basicDocument "Example") (page messagePage')
|
|
|
|
|
|
messagePage :: (Hyperbole :> es) => Page es '[]
|
|
messagePage = do
|
|
load $ do
|
|
pure $ do
|
|
el bold "Message Page"
|
|
messageView "Hello World"
|
|
|
|
|
|
messageView :: Text -> View c ()
|
|
messageView m = do
|
|
el_ "Message:"
|
|
el_ (text m)
|
|
|
|
|
|
data Message = Message
|
|
deriving (Show, Read, ViewId)
|
|
|
|
|
|
data MessageAction = SetMessage Text
|
|
deriving (Show, Read, ViewAction)
|
|
|
|
|
|
instance HyperView Message where
|
|
type Action Message = MessageAction
|
|
|
|
|
|
message :: Message -> MessageAction -> Eff es (View Message ())
|
|
message _ (SetMessage m) = do
|
|
-- side effects
|
|
pure $ messageView' m
|
|
|
|
|
|
messageView' :: Text -> View Message ()
|
|
messageView' m = do
|
|
el bold "Message"
|
|
el_ (text m)
|
|
button (SetMessage "Goodbye World") id "Change Message"
|
|
|
|
|
|
messagePage' :: (Hyperbole :> es) => Page es '[Message]
|
|
messagePage' = do
|
|
handle message $ load $ do
|
|
pure $ do
|
|
el bold "Message Page"
|
|
hyper Message $ messageView' "Hello World"
|