{-# LANGUAGE CPP #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-}
{-# OPTIONS_GHC -fno-warn-redundant-constraints #-}
module Shpadoinkle.Disembodied.Sample where
import Servant.API
import Shpadoinkle (Html, JSM, MonadJSM)
import Shpadoinkle.Disembodied (Disembodied (SiteSpec), writeSite)
import Shpadoinkle.Html (button, h1_, onClick)
import Shpadoinkle.Router (View)
type Pages m
= "about" :> View m Int
:<|> View m ()
about :: MonadJSM m => Html m Int
about =
h1_ [ button
[ onClick (+ 1) ]
[ "Increment" ]
]
home :: Monad m => Html m a
home = h1_ [ "home" ]
site :: MonadJSM m => SiteSpec (Pages m)
site = about :<|> home
makeSite :: IO ()
makeSite = writeSite @(Pages JSM) "" site