jsmw: Javascript Monadic Writer base package.

[ bsd3, language, library ] [ Propose Tags ]

An EDSL inspired in part by HJ(ava)Script and HSP aimed at coding in typed Javascript. It uses WebBits as the underlying representation of Javascript.

This package provides the basic API sufficient to create simple dynamic web pages.

Below is a simple example of a program that increments or decrements a value in an input field depending on whether Enter or Shift-Enter was pressed.

Save this program in a file, and run runghc on the file. Javascript will be output to be placed into HEAD element of a blank HTML page. Give the page body attribute:

<body onload="javascript:main()">

to run the script when the page loads.

A live example of this program is available here:


module Main where

import Prelude hiding (putStrLn)
import System.IO.UTF8
import BrownPLT.JavaScript
import BrownPLT.JavaScript.PrettyPrint
import Control.Monad
import Language.JSMW
import Data.DOM
import Data.DOM.Dom
import Data.DOM.Html2
import Data.DOM.Events
import Data.DOM.KeyEvent
import Data.DOM.HTMLHRElement
import Data.DOM.HTMLInputElement

main = putStrLn $ show $ stmt $
  FunctionStmt undefined (Id undefined "main") [] (getBlock ( runJSMW 0 q))

q = do
  passive (mkText $ string
    "Example 1: Press Enter to increase value, Shift-Enter to decrease value")
  passive mkHr
  mkInput `container` (do
    setHandler "keypress" plusOne
    ask >>= set'value (string "0") >>= focus)

plusOne :: OnHandler TKeyEvent THTMLInputElement

plusOne e = do
  c <- getm'keyCode e
  switch (c) $ do
    cDOM_VK_ENTER --> do i <- ask
                         v <- getm'value i
                         vv <- switch v $ do
                           "" --> stringM "0"
                           none (return v)
                         n <- parseInt vv 0
                         shft <- get'shiftKey e
                         n2 <- switch shft $ do
                           True --> return (n - number 1)
                           False --> return (n + number 1)
                         once =<< (toString n2 >>= flip set'value i)
                         return false
    none (return true)


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS] 0.1
Dependencies base (>=4.0.0), DOM (==2.0.1), mtl, WebBits (==0.15) [details]
License BSD-3-Clause
Copyright 2009, Dmitry Golubovsky
Author Dmitry Golubovsky
Maintainer golubovsky@gmail.com
Category Language
Uploaded by DmitryGolubovsky at 2009-04-26T03:43:02Z
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 1046 total (4 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]