miso

A tasty Haskell front-end framework

http://github.com/dmjio/miso

Version on this page:0.1.4.0
LTS Haskell 22.14:1.8.3.0
Stackage Nightly 2023-12-26:1.8.3.0
Latest on Hackage:1.8.3.0

See all snapshots miso appears in

BSD-3-Clause licensed and maintained by David M. Johnson
This version can be pinned in stack with:miso-0.1.4.0@sha256:dad53360d48821566d5992e662fbb6cefaa0249bbcdd70672555ed01ad4fbf4d,4275

Miso is a small “isomorphicHaskell front-end framework featuring a virtual-dom, diffing / patching algorithm, event delegation, event batching, SVG, Server-sent events, Websockets, and an extensible Subscription-based subsystem. Inspired by Elm, Redux and Bobril. IO and other effects (like XHR) can be introduced into the system via the Effect data type. Miso makes heavy use of the GHCJS FFI and therefore has minimal dependencies.

Examples

Haddocks

Getting Started

{-# LANGUAGE RecordWildCards #-}

module Main where

import Miso

type Model = Int

main :: IO ()
main = startApp App {..}
  where
    model  = 0
    update = updateModel
    view   = viewModel
    events = defaultEvents
    subs   = []

updateModel :: Action -> Model -> Effect Model Action
updateModel AddOne m = noEff (m + 1)
updateModel SubtractOne m = noEff (m - 1)

data Action
  = AddOne
  | SubtractOne
  deriving (Show, Eq)

viewModel :: Model -> View Action
viewModel x = div_ [] [
   button_ [ onClick AddOne ] [ text "+" ]
 , text (show x)
 , button_ [ onClick SubtractOne ] [ text "-" ]
 ]