hyperbole-0.6.0: Interactive HTML apps using type-safe serverside Haskell
Safe HaskellSafe-Inferred
LanguageGHC2021

Web.Hyperbole.HyperView.Types

Synopsis

Documentation

class (ViewId id, ViewAction (Action id), ConcurrencyValue (Concurrency id)) => HyperView id es where Source #

HyperViews are interactive subsections of a Page

Create an instance with a unique view id type and a sum type describing the actions the HyperView supports. The View Id can contain context (a database id, for example)

data Message = Message1 | Message2
  deriving (Generic, ViewId)

instance HyperView Message es where
  data Action Message
    = Louder Text
    deriving (Generic, ViewAction)

  update (Louder msg) = do
    let new = msg <> "!"
    pure $ messageView new

Associated Types

data Action id Source #

Outline all actions that are permitted in this HyperView

data Action Message = SetMessage Text | ClearMessage
  deriving (Generic, ViewAction)

type Require id :: [Type] Source #

Include any child hyperviews here. The compiler will make sure that the page knows how to handle them

type Require Messages = '[ChildView]

type Require id = '[]

type Concurrency id :: ConcurrencyMode Source #

Control how overlapping actions are handled. Drop by default

type Concurrency Autocomplete = Replace

type Concurrency id = Drop

Methods

update :: Hyperbole :> es => Action id -> Eff (Reader id : (State (ViewState id) : es)) (View id ()) Source #

Specify how the view should be updated for each Action

update (SetMessage msg) = pure $ messageView msg
update ClearMessage = pure $ messageView ""

Instances

Instances details
HyperView () es Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

Associated Types

data Action () Source #

type Require () :: [Type] Source #

type Concurrency () :: ConcurrencyMode Source #

Methods

update :: Action () -> Eff (Reader () ': (State (ViewState ()) ': es)) (View () ()) Source #

HyperView (Root views) es Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

Associated Types

data Action (Root views) Source #

type Require (Root views) :: [Type] Source #

type Concurrency (Root views) :: ConcurrencyMode Source #

Methods

update :: Action (Root views) -> Eff (Reader (Root views) ': (State (ViewState (Root views)) ': es)) (View (Root views) ()) Source #

data ConcurrencyMode Source #

Constructors

Drop

Do not send any actions that occur while one is active. Prevents double-submitting writes or expensive operations

Replace

Ignore the results of older actions in favor of new ones. Use for read-only views with fast-firing interactions, like autocomplete, sliders, etc

Instances

Instances details
Generic ConcurrencyMode Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

Associated Types

type Rep ConcurrencyMode :: Type -> Type #

FromEncoded ConcurrencyMode Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

ToEncoded ConcurrencyMode Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

ConcurrencyValue 'Drop Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

ConcurrencyValue 'Replace Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

type Rep ConcurrencyMode Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

type Rep ConcurrencyMode = D1 ('MetaData "ConcurrencyMode" "Web.Hyperbole.HyperView.Types" "hyperbole-0.6.0-inplace" 'False) (C1 ('MetaCons "Drop" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Replace" 'PrefixI 'False) (U1 :: Type -> Type))

data Root (views :: [Type]) Source #

The top-level view returned by a Page. It carries a type-level list of every HyperView used in our Page so the compiler can check our work and wire everything together.

Constructors

Root 

Instances

Instances details
Generic (Action (Root views)) Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

Associated Types

type Rep (Action (Root views)) :: Type -> Type #

Methods

from :: Action (Root views) -> Rep (Action (Root views)) x #

to :: Rep (Action (Root views)) x -> Action (Root views) #

Generic (Root views) Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

Associated Types

type Rep (Root views) :: Type -> Type #

Methods

from :: Root views -> Rep (Root views) x #

to :: Rep (Root views) x -> Root views #

ViewAction (Action (Root views)) Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

ViewId (Root views) Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

Associated Types

type ViewState (Root views) Source #

HyperView (Root views) es Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

Associated Types

data Action (Root views) Source #

type Require (Root views) :: [Type] Source #

type Concurrency (Root views) :: ConcurrencyMode Source #

Methods

update :: Action (Root views) -> Eff (Reader (Root views) ': (State (ViewState (Root views)) ': es)) (View (Root views) ()) Source #

type Rep (Action (Root views)) Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

type Rep (Action (Root views)) = D1 ('MetaData "Action" "Web.Hyperbole.HyperView.Types" "hyperbole-0.6.0-inplace" 'False) (C1 ('MetaCons "RootNone" 'PrefixI 'False) (U1 :: Type -> Type))
type Rep (Root views) Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

type Rep (Root views) = D1 ('MetaData "Root" "Web.Hyperbole.HyperView.Types" "hyperbole-0.6.0-inplace" 'False) (C1 ('MetaCons "Root" 'PrefixI 'False) (U1 :: Type -> Type))
data Action (Root views) Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

data Action (Root views) = RootNone
type Concurrency (Root views) Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

type Concurrency (Root views) = 'Drop
type Require (Root views) Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

type Require (Root views) = views
type ViewState (Root views) Source # 
Instance details

Defined in Web.Hyperbole.HyperView.Types

type ViewState (Root views) = ()