packages feed

hplayground (empty) → 0.1.0.1

raw patch · 7 files changed

+3859/−0 lines, 7 filesdep +basedep +containersdep +data-defaultsetup-changed

Dependencies added: base, containers, data-default, haste-compiler, haste-lib, haste-perch, monads-tf, transformers

Files

+ LICENSE view
@@ -0,0 +1,27 @@+Copyright (c) Alberto Gómez Corona 2008++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions+are met:+1. Redistributions of source code must retain the above copyright+   notice, this list of conditions and the following disclaimer.+2. Redistributions in binary form must reproduce the above copyright+   notice, this list of conditions and the following disclaimer in the+   documentation and/or other materials provided with the distribution.+3. Neither the name of the author nor the names of his contributors+   may be used to endorse or promote products derived from this software+   without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF+SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ hplayground.cabal view
@@ -0,0 +1,50 @@+name: hplayground+version: 0.1.0.1+cabal-version: >=1.8+build-type: Simple+license: BSD3+license-file: LICENSE+maintainer: agocorona@gmail.com+stability: experimental+bug-reports: https://github.com/agocorona/MFlow/issues+synopsis: a client-side haskell framework that compiles to javascript with the haste compiler+description: create and compose reactive widgets in the client side using idiomatic haskell.+             Formlets with reactive effects in the client side++homepage:    https://github.com/agocorona/hplayground+category: Web+author: Alberto Gómez Corona+data-dir: ""+extra-source-files: src/Main.hs, src/Main.html++source-repository head+    type: git+    location: http://github.com/agocorona/hplayground++Flag Haste-inst+  Description: either if it is being compiled with haste-inst or with cabal+  Default: False+++library+   if flag(haste-inst)+    build-depends: base >4.0 && <5, transformers -any,+                   containers -any, data-default -any, monads-tf,+                   haste-lib -any, haste-perch -any+   else+    build-depends: base >4.0 && <5, transformers -any,+                   containers -any, data-default -any, monads-tf,+                   haste-compiler -any, haste-perch -any++    hs-source-dirs: src .+    exposed-modules: Haste.HPlay.View  Haste.HPlay.Cell++--executable Main+--    build-depends: base >4.0 && <5, transformers -any, monads-tf -any,+--                   containers -any, data-default -any,+--                   haste-lib -any, haste-perch+--    main-is: Main.hs+--    buildable: True+--    hs-source-dirs: src .++
+ src/Haste/HPlay/Cell.hs view
@@ -0,0 +1,70 @@+-----------------------------------------------------------------------------+--+-- Module      :  Cell+-- Copyright   :+-- License     :  BSD3+--+-- Maintainer  :  agocorona@gmail.com+-- Stability   :  experimental+-- Portability :+--+-- |+--+-----------------------------------------------------------------------------++module Haste.HPlay.Cell  where+import Haste.HPlay.View+import Control.Monad.IO.Class+import Haste+import Data.Typeable+import Unsafe.Coerce+++data Cell  a = Cell { mk :: Maybe a -> Widget a+                    , setter ::  a -> IO()+                    , getter ::  IO a}++--instance Functor Cell where+--  fmap f cell = cell{setter= \c x ->  c .= f x, getter = \cell -> get cell >>= return . f}++++boxCell id = Cell{ mk= \mv -> getParam (Just id) "text" mv+                , setter= \ x -> withElem id $ \e -> setProp e "value" (show1 x)+                , getter=  withElem id $ \e -> getProp e "value" >>= return . read1}+     where+     show1 x= if typeOf x== typeOf (undefined :: String)+                                then unsafeCoerce x+                                else show x+     read1 s= if typeOf s== typeOf (undefined :: String)+                                then unsafeCoerce s+                                else read s++(.=) cell x = liftIO $ (setter cell )  x++get cell = liftIO $ getter cell+++(..=) cell cell'= get cell' >>= (.=) . cell++infixr 0 .=, ..=++-- experimental: to permit cell arithmetic++instance Num a => Num (Cell a) where+  c + c'= Cell undefined undefined  $+            do r1 <- get c+               r2 <- get c'+               return $ r1 + r2++  c * c'= Cell undefined undefined $+            do r1 <- get c+               r2 <- get c'+               return $ r1 * r2++  abs c= c{getter=  get c >>= return . abs}++  signum c= c{getter=  get c >>= return . signum}++  fromInteger i= Cell  undefined undefined  . return $ fromInteger i+
+ src/Haste/HPlay/View.hs view
@@ -0,0 +1,1208 @@+-----------------------------------------------------------------------------
+--
+-- Module      :  View
+-- Copyright   :
+-- License     :  BSD3
+--
+-- Maintainer  :  agocorona@gmail.com
+-- Stability   :  experimental
+-- Portability :
+--
+-- |
+--
+-----------------------------------------------------------------------------
+
+{-# LANGUAGE  FlexibleContexts, FlexibleInstances
+    , TypeFamilies, DeriveDataTypeable, UndecidableInstances, ExistentialQuantification
+    , GADTs
+    #-}
+module Haste.HPlay.View(+Widget,++-- * widget combinators and modifiers++wcallback, (<+>), (**>), (<**), validate+,firstOf, manyOf, allOf+,(<<<),(<<),(<++),(++>),(<!)++-- * basic widgets++,getString,inputString, getInteger,inputInteger,+getInt, inputInt,getPassword,inputPassword,+setRadio,setRadioActive,getRadio+,setCheckBox, getCheckBoxes+,getTextBox, getMultilineText,textArea,getBool+,getSelect,setOption,setSelectedOption, wlabel,+resetButton,inputReset, submitButton,+inputSubmit, wlink, noWidget, stop,wraw, isEmpty++-- * out of flow updates+,at, UpdateMethod(..)++-- * Session data storage+,getSessionData,getSData,setSessionData,setSData+,delSessionData,delSData++-- * reactive and events+,resetEventData,getEventData,EventData(..),EvData(..)+,raiseEvent, fire, wake, react, pass+,continueIf, wtimeout, Event(..)++-- * running it+,runWidget, runWidgetId, runBody, addHeader++-- * Perch is reexported+,module Haste.Perch++-- * low level and internals+,getNextId,genNewId+,getParam+,FormInput(..)+,View(..),FormElm(..)++)  where
+import Control.Applicative
+import Data.Monoid
+import Control.Monad.State
+import Control.Monad.IO.Class
+import Data.Typeable
+import Unsafe.Coerce
+import Data.Maybe
+import Haste+import Haste.Prim
+import Haste.Foreign(ffi)
+import Unsafe.Coerce
+import System.IO.Unsafe
+import Control.Concurrent.MVar
+import qualified Data.Map as M
+import Control.Monad.Trans.Maybe
+import Prelude hiding(id)
+import Haste.Perch
+-- | @View v m a@ is a widget (formlet)  with formatting `v`  running the monad `m` (usually `IO`) and which return a value of type `a`
+--
+-- It has 'Applicative', 'Alternative' and 'Monad' instances.
+--
+-- Things to know about these instances:
+--
+--   If the View expression does not validate, ask will present the page again.
+--
+-- /Alternative instance/: Both alternatives are executed. The rest is as usual
+--
+-- /Monad Instance/:
+--
+--  The rendering of each statement is added to the previous. If you want to avoid this, use 'wcallback'
+--
+--  The execution is stopped when the statement has a formlet-widget that does not validate and
+-- return an invalid response (So it will present the page again if no other widget in the expression validates).
+--
+--  The monadic code is executed from the beginning each time the page is presented or refreshed
+--
+--  use 'pageFlow' if your page has more than one monadic computation with dynamic behaviour
+--
+-- use 'pageFlow' to identify each subflow branch of a conditional
+--
+--  For example:
+--
+--  > pageFlow "myid" $ do
+--  >      r <- formlet1
+--  >      liftIO $ ioaction1 r
+--  >      s <- formlet2
+--  >      liftIO $ ioaction2 s
+--  >      case s of
+--  >       True  -> pageFlow "idtrue" $ do ....
+--  >       False -> paeFlow "idfalse" $ do ...
+--  >      ...
+--
+--  Here if  @formlet2@ do not validate, @ioaction2@ is not executed. But if @formLet1@ validates and the
+--  page is refreshed two times (because @formlet2@ has failed, see above),then @ioaction1@ is executed two times.
+--  use 'cachedByKey' if you want to avoid repeated IO executions.
+data NeedForm= HasForm | HasElems  | NoElems deriving Show
+type SData= ()
+
+--instance MonadState (  Widget) where
+--  type StateType (  Widget)=  MFlowState
+--
+--instance MonadState IO where
+--  type StateType IO=  MFlowState
+
+data EventF= forall b c.EventF (IO (Maybe b)) (b -> IO (Maybe c)) --
+
+data MFlowState= MFlowState { mfPrefix :: String,mfSequence :: Int
+                            , needForm :: NeedForm, process :: EventF+                            , fixed :: Bool
+                            , mfData :: M.Map TypeRep SData}
+
+type Widget a=  View Perch IO a
+
+type WState view m = StateT MFlowState m
+data FormElm view a = FormElm view (Maybe a)
+newtype View v m a = View { runView :: WState v m (FormElm v a)}
+
+mFlowState0= MFlowState "" 0 NoElems  (EventF (return Nothing)
+                        (const $ return Nothing) ) False M.empty
+
+
+instance Functor (FormElm view ) where
+  fmap f (FormElm form x)= FormElm form (fmap f x)
+
+instance (Monoid view) => Monoid (FormElm view a) where
+  mempty= FormElm mempty Nothing
+  mappend (FormElm f1 x1) (FormElm f2 x2)= FormElm (f1 <> f2) (x1 <|> x2)
+
+instance  (Monad m,Functor m) => Functor (View view m) where
+  fmap f x= View $   fmap (fmap f) $ runView x
+
+  
+instance (Monoid view,Functor m, Monad m) => Applicative (View view m) where
+  pure a  = View  .  return . FormElm mempty $ Just a
+  View f <*> View g= View $
+                   f >>= \(FormElm form1 k) ->
+                   g >>= \(FormElm form2 x) ->
+                   return $ FormElm (form1 `mappend` form2) (k <*> x) 
+
+instance (Monoid view, Functor m, Monad m) => Alternative (View view m) where
+  empty= View $ return $ FormElm mempty Nothing
+  View f <|> View g= View $ do
+                   FormElm form1 x <- f
+                   FormElm form2 y <- g
+                   return $ FormElm (form1 <> form2) (x <|> y) 
+
+
+strip st x= View $ do
+    st' <- get
+    put st'{mfSequence= mfSequence st}
+    FormElm _ mx <- runView x
+    put st'
+    return $ FormElm mempty mx
+
+setEventCont :: Widget a -> (a -> Widget b)  -> String -> StateT MFlowState IO EventF
+setEventCont x f  id= do
+   st <- get
+   let conf = process st
+   case conf of
+     EventF x' f'  -> do
+       let addto f f'= \x -> do
+             mr <- runWidgetId (f x) id
+             case mr of
+               Nothing -> return Nothing
+               Just x' ->  f' x'
+           idx= runWidgetId ( strip st  x) id
+       put st{process= EventF idx (f `addto` unsafeCoerce f') }
+   return conf
+
+resetEventCont cont= modify $ \s -> s {process= cont}
+
+instance Monad (View Perch IO) where
+    x >>= f = View $ do
+           id <- genNewId
+           contold <- setEventCont x f  id
+           FormElm form1 mk <- runView x
+           resetEventCont contold+           let span= nelem "span" `attrs` [("id", id)]
+           case mk of
+             Just k  -> do
+                FormElm form2 mk <- runView $ f k+                return $ FormElm (form1 <> (span `child`  form2)) mk
+             Nothing -> 
+                return $ FormElm  (form1 <> span)  Nothing
+                        
+
+    return = View .  return . FormElm  mempty . Just
+--    fail msg= View . return $ FormElm [inRed msg] Nothing
++
+--static w= View $ do+--   modify $ \st -> st{fixed=True}+--   runView w
+
+instance (FormInput v,Monad (View v m), Monad m, Functor m, Monoid a) => Monoid (View v m a) where
+  mappend x y = mappend <$> x <*> y  -- beware that both operands must validate to generate a sum
+  mempty= return mempty
+
+
+-- | It is a callback in the view monad. The callback rendering substitutes the widget rendering
+-- when the latter is validated, without afecting the rendering of other widgets. This allow
+-- the simultaneous execution of different behaviours in different widgets in the
+-- same page.
+wcallback
+  ::  Widget a -> (a ->Widget b) -> Widget b
+wcallback  x f = View $ do
+   idhide <- genNewId
+   id <- genNewId+   runView $ identified idhide x >>= delBefore idhide f                        
+   where
+   delBefore id f = \x -> View $ do
+     FormElm render mx <- runView $ f x
+     return $ FormElm (del id <> render ) mx
+     where
+     del id= Perch $ \e' -> do
+           withElem id $ \e -> do
+             par <- parent e
+             removeChild e par
+           return e'
+
+identified id w= View $ do
+     let span= nelem "span" `attr` ("id", id)
+     FormElm f mx <- runView w
+     return $ FormElm (span `child` f) mx
+++--wcallback
+--  ::  Widget a -> (a -> Widget b) -> Widget b                      
+--wcallback  x' f = View $ do
+--   id <- genNewId
+--   let x = identified id x'
+--
+--   contold <- setEventCont x f  id
+--   FormElm form1 mk <- runView x
+--   resetEventCont contold
+--   case mk of
+--     Just k  -> do
+--        FormElm form2 mk <- runView $ f k
+--        return $ FormElm  form2 mk
+--     Nothing -> 
+--        return $ FormElm  form1  Nothing
+++
+instance  (FormInput view,Monad m,Monad (View view m)) => MonadState (View view m) where
+  type StateType (View view m)= MFlowState
+  get = View $  get >>=  return . FormElm mempty . Just 
+  put st = View $  put st >>=  return . FormElm mempty . Just 
+
+
+instance (FormInput view,Monad (View view m),MonadIO m) => MonadIO (View view m) where
+    liftIO io=   let x= liftIO io in x `seq` lift x 
+
+
+----- some combinators ----
+
+-- | Join two widgets in the same page
+-- the resulting widget, when `ask`ed with it, return a 2 tuple of their validation results
+-- if both return Noting, the widget return @Nothing@ (invalid).
+--
+-- it has a low infix priority: @infixr 2@
+--
+--  > r <- ask  widget1 <+>  widget2
+--  > case r of (Just x, Nothing) -> ..
+(<+>) , mix ::  (Monad m, FormInput view)
+      => View view m a
+      -> View view m b
+      -> View view m (Maybe a, Maybe b)
+mix digest1 digest2= View $ do
+  FormElm f1 mx' <- runView  digest1
+  s1 <- get
+  FormElm f2 my' <- runView  digest2
+  s2 <- get
+  return $ FormElm (f1 <> f2)
+         $ case (mx',my') of
+              (Nothing, Nothing) -> Nothing
+              other              -> Just other
+
+infixr 2 <+>
+
+(<+>)  = mix
+
+
+
+-- | The first elem result (even if it is not validated) is discarded, and the secod is returned
+-- . This contrast with the applicative operator '*>' which fails the whole validation if
+-- the validation of the first elem fails.
+--
+-- The first element is displayed however, as happens in the case of '*>' .
+--
+-- Here @w\'s@ are widgets and @r\'s@ are returned values
+--
+--   @(w1 <* w2)@  will return @Just r1@ only if w1 and w2 are validated
+--
+--   @(w1 <** w2)@ will return @Just r1@ even if w2 is not validated
+--
+--  it has a low infix priority: @infixr 1@
+
+(**>) :: (Functor m, Monad m, FormInput view)
+      => View view m a -> View view m b -> View view m b
+
+(**>) f g = View $ do
+   FormElm form1 k <- runView $ valid f
+   FormElm form2 x <- runView g
+   return $ FormElm (form1 <> form2) (k *> x)
+
+
+
+valid form= View $ do
+   FormElm form mx <- runView form
+   return $ FormElm form $ Just undefined
+
+infixr 1  **>  ,  <** 
+
+-- | The second elem result (even if it is not validated) is discarded, and the first is returned
+-- . This contrast with the applicative operator '*>' which fails the whole validation if
+-- the validation of the second elem fails.
+-- The second element is displayed however, as in the case of '<*'.
+-- see the `<**` examples
+--
+--  it has a low infix priority: @infixr 1@
+(<**) :: (Functor m, Monad m, FormInput view) =>
+     View view m a -> View view m b -> View view m a
+-- (<**) form1 form2 =  form1 <* valid form2
+(<**) f g = View $ do
+   FormElm form1 k <- runView f
+   s1 <- get
+   FormElm form2 x <- runView $ valid g
+   s2 <- get
+
+
+   return $ FormElm (form1 <> form2) (k <* x)
+
+
+
+
+
+instance Monoid view => MonadTrans (View view) where
+  lift f = View $  (lift  f) >>= \x ->  return $ FormElm mempty $ Just x
+
+
+type Name= String
+type Type= String
+type Value= String
+type Checked= Bool
+type OnClick= Maybe String
+
+
+-- | Minimal interface for defining the basic form and link elements. The core of MFlow is agnostic
+-- about the rendering package used. Every formatting (either HTML or not) used with MFlow must have an
+-- instance of this class.
+-- See "MFlow.Forms.Blaze.Html for the instance for blaze-html" "MFlow.Forms.XHtml" for the instance
+-- for @Text.XHtml@ and MFlow.Forms.HSP for the instance for Haskell Server Pages.
+class (Monoid view,Typeable view)   => FormInput view where
+    fromStr :: String -> view
+    fromStrNoEncode :: String -> view
+    ftag :: String -> view  -> view
+    inred   :: view -> view
+    flink ::  String -> view -> view 
+    flink1:: String -> view
+    flink1 verb = flink verb (fromStr  verb) 
+    finput :: Name -> Type -> Value -> Checked -> OnClick -> view 
+    ftextarea :: String -> String -> view
+    fselect :: String -> view -> view
+    foption :: String -> view -> Bool -> view
+    foption1 :: String -> Bool -> view
+    foption1   val msel= foption val (fromStr val) msel
+    formAction  :: String -> String -> view -> view
+    attrs :: view -> Attribs -> view
+
+type Attribs= [(String, String)]
+
+
+data ParamResult v a= NoParam | NotValidated String v | Validated a deriving (Read, Show)
+
+valToMaybe (Validated x)= Just x
+valToMaybe _= Nothing
+
+isValidated (Validated x)= True
+isValidated _= False
+
+fromValidated (Validated x)= x
+fromValidated NoParam= error $ "fromValidated : NoParam"
+fromValidated (NotValidated s err)= error $ "fromValidated: NotValidated "++ s
+
+getParam1 :: (MonadIO m, MonadState  m, Typeable a, Read a, FormInput v)
+          => String ->  m (ParamResult v a)
+getParam1 par = do
+   me <- elemById par
+   case me of
+     Nothing -> return  NoParam
+     Just e ->  do
+       mv <- getValue e
+       case mv of
+         Nothing -> return NoParam
+         Just v -> do
+           readParam v  
+
+
+type Params= Attribs
+
+
+  
+readParam :: (Monad m, MonadState  m, Typeable a, Read a, FormInput v)
+           => String -> m (ParamResult v a)
+readParam x1 = r
+ where
+ r= maybeRead x1
+      
+ getType ::  m (ParamResult v a) -> a
+ getType= undefined
+ x= getType r
+ maybeRead str= do
+   let typeofx = typeOf x
+   if typeofx == typeOf  ( undefined :: String)   then
+           return . Validated $ unsafeCoerce str
+    else case readsPrec 0 $ str of
+              [(x,"")] ->  return $ Validated x
+              _ -> do
+                   let err= inred . fromStr $ "can't read \"" ++ str ++ "\" as type " ++  show (typeOf x)
+                   return $ NotValidated str err
+
+-- | Validates a form or widget result against a validating procedure
+--
+-- @getOdd= getInt Nothing `validate` (\x -> return $ if mod x 2==0 then  Nothing else Just "only odd numbers, please")@
+validate
+  :: (FormInput view,  Monad m,Monad (View view m)) =>
+     View view m a
+     -> (a -> WState view m (Maybe view))
+     -> View view m a
+validate  formt val= do
+   mx <- View $ do
+         FormElm form mx <- runView  formt
+         return $ FormElm form (Just mx)
+   View $ do
+     case mx of
+        Just x -> do
+          me <- val x
+          case me of
+             Just str -> return $ FormElm (inred  str) Nothing
+             Nothing  -> return $ FormElm mempty mx
+        _ -> return $ FormElm mempty Nothing
+
+-- | Generate a new string. Useful for creating tag identifiers and other attributes.
+--
+-- if the page is refreshed, the identifiers generated are the same.
+genNewId :: (StateType m ~ MFlowState, MonadState  m) =>  m String
+genNewId=  do
+      st <- get
+      let n= mfSequence st
+          prefseq=  mfPrefix st
+      put $ st{mfSequence= n+1}
+
+      return $ 'p':show n++prefseq  
+
+
+-- | get the next ideitifier that will be created by genNewId
+getNextId :: (StateType m ~ MFlowState,MonadState  m) =>  m String
+getNextId=  do
+      st <- get
+      let n= mfSequence st
+          prefseq=  mfPrefix st
+      return $ 'p':show n++prefseq
+
+
+-- | Display a text box and return a non empty String
+getString  :: (StateType (View view m) ~ MFlowState,FormInput view,Monad(View view m),MonadIO m) =>
+     Maybe String -> View view m String
+getString ms = getTextBox ms
+--     `validate`
+--     \s -> if Prelude.null s then return (Just $ fromStr "")
+--                    else return Nothing
+
+inputString  :: (StateType (View view m) ~ MFlowState,FormInput view,Monad(View view m),MonadIO m) =>
+     Maybe String -> View view m String
+inputString= getString
+
+-- | Display a text box and return an Integer (if the value entered is not an Integer, fails the validation)
+getInteger :: (StateType (View view m) ~ MFlowState,FormInput view,  MonadIO m) =>
+     Maybe Integer -> View view m  Integer
+getInteger =  getTextBox
+
+inputInteger :: (StateType (View view m) ~ MFlowState,FormInput view,  MonadIO m) =>
+     Maybe Integer -> View view m  Integer
+inputInteger= getInteger
+
+-- | Display a text box and return a Int (if the value entered is not an Int, fails the validation)
+getInt :: (StateType (View view m) ~ MFlowState,FormInput view, MonadIO m) =>
+     Maybe Int -> View view m Int
+getInt =  getTextBox
+
+inputInt :: (StateType (View view m) ~ MFlowState,FormInput view, MonadIO m) =>
+     Maybe Int -> View view m Int
+inputInt =  getInt
+
+-- | Display a password box
+getPassword :: (FormInput view,StateType (View view m) ~ MFlowState,
+     MonadIO m) =>
+     View view m String
+getPassword = getParam Nothing "password" Nothing
+
+inputPassword :: (StateType (View view m) ~ MFlowState,FormInput view,
+     MonadIO m) =>
+     View view m String
+inputPassword= getPassword
+
+newtype Radio a= Radio a
+
+
+
+-- | Implement a radio button
+-- the parameter is the name of the radio group
+setRadio :: (FormInput view,  MonadIO m,
+             Typeable a, Eq a, Show a) =>
+            a -> String -> View view m  (Radio a)
+setRadio v n= View $ do
+  id <- genNewId
+  st <- get
+  put st{needForm= HasElems}
+  me <- liftIO $ elemById id
+  checked <- case me of
+       Nothing -> return ""
+       Just e  -> liftIO $   getProp e "checked"
+  let strs= if  checked=="true" then Just v else Nothing
+--  let mn= if null strs then False else True
+      ret= fmap  Radio  strs 
+      str = if typeOf v == typeOf(undefined :: String)
+                   then unsafeCoerce v else show v
+  return $ FormElm
+      ( finput id "radio" str ( isJust strs ) Nothing `attrs` [("name",n)])
+      ret
+ 
+
+setRadioActive rs x= setRadio rs x `raiseEvent` OnClick
+
+-- | encloses a set of Radio boxes. Return the option selected
+getRadio
+  :: (Monad (View view m), Monad m, Functor m, FormInput view) =>
+     [String -> View view m (Radio a)] -> View view m a
+getRadio ws = View $ do
+   id <- genNewId
+   fs <- mapM (\w -> runView (w id)) ws
+   let FormElm render mx = mconcat fs
+   return $ FormElm render $ fmap (\(Radio r) -> r) mx
+
+
+data CheckBoxes = CheckBoxes [String]
+
+instance Monoid CheckBoxes where
+  mappend (CheckBoxes xs) (CheckBoxes ys)= CheckBoxes $ xs ++ ys
+  mempty= CheckBoxes []
+
+
+-- | Display a text box and return the value entered if it is readable( Otherwise, fail the validation)
+setCheckBox :: (FormInput view,  MonadIO m) =>
+                Bool -> String -> View view m  CheckBoxes
+setCheckBox checked' v= View $ do
+  n  <- genNewId
+  st <- get
+  put st{needForm= HasElems}
+  me <- liftIO $ elemById n
+  checked <- case me of
+       Nothing ->  return $ if checked' then "true" else ""
+       Just e  -> liftIO $  getProp e "checked"
+  let strs= if  checked=="true"  then [v] else []
+--  let mn= if null strs then False else True
+      ret= Just $ CheckBoxes  strs 
+
+  return $ FormElm
+      ( finput n "checkbox" v ( checked' ) Nothing)
+      ret
+ 
+
+getCheckBoxes :: (Monad m, FormInput view) =>  View view m  CheckBoxes ->  View view m  [String]
+getCheckBoxes w= View $ do+   FormElm render mcb <- runView w+   return $ FormElm render $ case mcb of+     Just(CheckBoxes rs) -> Just rs+     _                   -> Nothing
+
+
+
+whidden :: (MonadIO m, FormInput v,Read a, Show a, Typeable a) => a -> View v m a
+whidden x= res where+ res= View $ do
+      n <- genNewId
+      let showx= case cast x of
+                  Just x' -> x'
+                  Nothing -> show x
+      r <- getParam1 n `asTypeOf` typef res
+      return . FormElm (finput n "hidden" showx False Nothing) $ valToMaybe r
+      where+      typef :: View v m a -> StateT MFlowState m (ParamResult v a)+      typef = undefined
+
+
+
+
+getTextBox
+  :: (FormInput view, StateType (View view m) ~ MFlowState,
+      MonadIO  m,
+      Typeable a,
+      Show a,
+      Read a) =>
+     Maybe a ->  View view m a
+getTextBox ms  = getParam Nothing "text" ms
+
+
+getParam
+  :: (FormInput view,StateType (View view m) ~ MFlowState,
+      MonadIO m,
+      Typeable a,
+      Show a,
+      Read a) =>
+     Maybe String -> String -> Maybe a -> View view m  a
+getParam  look type1 mvalue= View $ getParamS look type1 mvalue
+
+getParamS look type1 mvalue= do
+    tolook <- case look of
+       Nothing  -> genNewId
+       Just n -> return n
+    let nvalue x = case x of
+           Nothing  -> ""
+           Just v   ->
+               case cast v of
+                 Just v' -> v'
+                 Nothing -> show v
+    st <- get
+
+    put st{needForm= HasElems}
+    r <- getParam1 tolook 
+    case r of
+       Validated x        -> return $ FormElm (finput tolook type1 (nvalue $ Just x) False Nothing) $ Just x
+       NotValidated s err -> return $ FormElm (finput tolook type1 s False Nothing <> err) $ Nothing
+       NoParam            -> return $ FormElm (finput tolook type1 (nvalue mvalue) False Nothing) $ Nothing
+
+
+
+
+-- | Display a multiline text box and return its content
+getMultilineText :: (FormInput view
+                 ,  MonadIO m)
+                   => String
+                 ->  View view m String
+getMultilineText nvalue = res where+ res= View $ do
+    tolook <- genNewId
+    r <- getParam1 tolook  `asTypeOf` typef res
+    case r of
+       Validated x        -> return $ FormElm (ftextarea tolook  x) $ Just x
+       NotValidated s err -> return $ FormElm (ftextarea tolook   s)  Nothing
+       NoParam            -> return $ FormElm (ftextarea tolook  nvalue)  Nothing
+    where+    typef :: View v m String -> StateT MFlowState m (ParamResult v a)+    typef = undefined++-- | A synonim of getMultilineText+textArea :: (FormInput view
+                 ,  MonadIO m)
+                   => String
+                 ->  View view m String
+textArea= getMultilineText+
+
+--getBool :: (FormInput view,
+--      Monad m, Monad (View view m), Functor m) =>
+--      Bool -> String -> String -> View view m Bool
+getBool mv truestr falsestr= do
+   r <- getSelect $   setOption truestr (fromStr truestr)  <! (if mv then [("selected","true")] else [])
+                  <|> setOption falsestr(fromStr falsestr) <! if not mv then [("selected","true")] else []
+   if  r == truestr  then return True else return False
+
+
+
+-- | Display a dropdown box with the options in the first parameter is optionally selected
+-- . It returns the selected option.
+getSelect :: (FormInput view,
+      MonadIO m,Typeable a, Read a) =>
+      View view m (MFOption a) ->  View view m  a
+getSelect opts = res where+  res= View $ do
+    tolook <- genNewId
+    st <- get
+    put st{needForm= HasElems}
+    r <- getParam1 tolook `asTypeOf` typef res
+--    setSessionData $ fmap MFOption $ valToMaybe r
+    FormElm form mr <- (runView opts)
+--
+    return $ FormElm (fselect tolook  form)  $ valToMaybe r+
+    where+    typef :: View v m a -> StateT MFlowState m (ParamResult v a)+    typef = undefined+
+newtype MFOption a= MFOption a deriving Typeable
+
+instance (FormInput view,Monad m, Functor m) => Monoid (View view m (MFOption a)) where
+  mappend =  (<|>)
+  mempty = Control.Applicative.empty
+
+-- | Set the option for getSelect. Options are concatenated with `<|>`
+setOption
+  :: (Monad m, Monad (View view m), Show a, Eq a, Typeable a, FormInput view) =>
+     a -> view -> View view m (MFOption a)
+setOption n v = View $ do
+--  mo <- getSessionData
+  runView $ setOption1 n v False
+
+
+-- | Set the selected option for getSelect. Options are concatenated with `<|>`
+setSelectedOption
+  :: (Monad m, Monad(View view m), Show a, Eq a, Typeable a, FormInput view) =>
+     a -> view -> View view m (MFOption a)
+setSelectedOption n v= View $ do
+--  mo <- getSessionData
+  runView $ setOption1 n v True
+--   Just Nothing -> setOption1 n v True
+--   Just (Just o) -> setOption1 n v $   n == o
+
+
+setOption1 :: (FormInput view,
+      Monad m, Typeable a, Eq a, Show a) =>
+      a -> view -> Bool ->  View view m  (MFOption a)
+setOption1 nam  val check= View $ do
+    let n = if typeOf nam == typeOf(undefined :: String)
+                   then unsafeCoerce nam
+                   else show nam
+
+    return . FormElm (foption n val check)  . Just $ MFOption nam
+
+
+wlabel
+  :: (Monad m, FormInput view) => view -> View view m a -> View view m a
+wlabel str w =View $ do
+   id <- getNextId+   FormElm render mx <- runView w
+   return $ FormElm (ftag "label" str `attrs` [("for",id)] <> render) mx
+
+
+resetButton :: (FormInput view, Monad m) => String -> View view m ()
+resetButton label= View $ return $ FormElm (finput  "reset" "reset" label False Nothing)
+                        $ Just ()
+
+inputReset :: (FormInput view, Monad m) => String -> View view m ()
+inputReset= resetButton
+
+submitButton :: (StateType (View view m) ~ MFlowState,FormInput view, MonadIO m) => String -> View view m String
+submitButton label= getParam Nothing "submit" $ Just label
+
+inputSubmit :: (StateType (View view m) ~ MFlowState,FormInput view, MonadIO m) => String -> View view m String
+inputSubmit= submitButton
+++linkPressed= unsafePerformIO $ newMVar Nothing++wlink :: (Show a, Typeable a) => a -> Perch -> Widget a
+wlink x v= View $ do+    ide <- genNewId+    FormElm render _ <- runView $ (wraw $ addEvent(a ! href ("#/"++show1 x)  $ v)+                                     OnClick (setId ide))+                        --   `raiseEvent` OnClick++    mi <- liftIO $ readMVar linkPressed+    if mi==  Just ide+     then return $ FormElm render $ Just x+     else return $ FormElm render Nothing
+   where+   addEvent be event action= Perch $ \e -> do
+     e' <- build be e
+     onEvent e' event  action 
+     return e'
++   setId ide _ _= do+     modifyMVar_ linkPressed . const .  return $ Just ide+   show1 x | typeOf x== typeOf (undefined :: String) = unsafeCoerce x+           | otherwise= show x++           
+-- | Concat a list of widgets of the same type, return a the first validated result
+firstOf :: (FormInput view, Monad m, Functor m)=> [View view m a]  -> View view m a
+firstOf xs= Prelude.foldl (<|>) noWidget xs++-- | from a list of widgets, it return the validated ones.
+manyOf :: (FormInput view, MonadIO m, Functor m)=> [View view m a]  -> View view m [a]
+manyOf xs=  (View $ do
+      forms <- mapM runView  xs
+      let vs  = mconcat $ Prelude.map (\(FormElm v _) ->   v) forms
+          res1= catMaybes $ Prelude.map (\(FormElm _ r) -> r) forms
+      return . FormElm vs $ Just res1)
+
+-- | like manyOf, but does not validate if one or more of the widgets does not validate
+allOf xs= manyOf xs `validate` \rs ->
+      if length rs== length xs
+         then return Nothing
+         else return $ Just mempty
+
+-- | Enclose Widgets within some formating.
+-- @view@ is intended to be instantiated to a particular format
+--
+-- NOTE: It has a infix priority : @infixr 5@ less than the one of @++>@ and @<++@ of the operators, so use parentheses when appropriate,
+-- unless the we want to enclose all the widgets in the right side.
+-- Most of the type errors in the DSL are due to the low priority of this operator.
+--
+
+(<<<) :: (Monad m,  Monoid view)
+          => (view ->view)
+         -> View view m a
+         -> View view m a
+(<<<) v form= View $ do
+  FormElm f mx <- runView form 
+  return $ FormElm (v  f) mx
+
+
+infixr 5 <<<
+
+-- | A parameter application with lower priority than ($) and direct function application
+(<<) :: (t1 -> t) -> t1 -> t
+(<<) tag content= tag  content
+
+infixr 7 <<
+
+
+-- | Append formatting code to a widget
+--
+-- @ getString "hi" <++ H1 << "hi there"@
+--
+-- It has a infix prority: @infixr 6@ higuer that '<<<' and most other operators
+(<++) :: (Monad m, Monoid v)
+      => View v m a
+      -> v
+      -> View v m a
+(<++) form v= View $ do
+  FormElm f mx <-  runView  form
+  return $  FormElm ( f <> v) mx
+
+infixr 6  ++> 
+infixr 6 <++ 
+-- | Prepend formatting code to a widget
+--
+-- @bold << "enter name" ++> getString Nothing @
+--
+-- It has a infix prority: @infixr 6@ higuer that '<<<' and most other operators
+(++>) :: (Monad m,  Monoid view)
+       => view -> View view m a -> View view m a
+html ++> w =  --  (html <>) <<< digest
+ View $ do
+  FormElm f mx <- runView w 
+  return $ FormElm (html  <>  f) mx
+
+
+
+-- | Add attributes to the topmost tag of a widget
+--
+-- it has a fixity @infix 8@
+infixl 8 <!
+widget <! attribs= View $ do
+      FormElm fs  mx <- runView widget
+      return $ FormElm  (fs `attrs` attribs) mx -- (head fs `attrs` attribs:tail fs) mx
+--      case fs of
+--        [hfs] -> return $ FormElm  [hfs `attrs` attribs] mx
+--        _ -> error $ "operator <! : malformed widget: "++ concatMap (unpack. toByteString) fs
+
+
++instance  Attributable (Widget a) where
+ (!) widget atrib =View $ do
+      FormElm fs  mx <- runView widget
+      return $ FormElm  (fs `attr` atrib) mx+ 
+
+
+-- | Empty widget that does not validate. May be used as \"empty boxes\" inside larger widgets.
+--
+-- It returns a non valid value.
+noWidget ::  (FormInput view,
+     Monad m, Functor m) =>
+     View view m a
+noWidget= Control.Applicative.empty
+
+-- | a sinonym of noWidget that can be used in a monadic expression in the View monad does not continue
+stop :: (FormInput view,
+     Monad m, Functor m) =>
+     View view m a
+stop= Control.Applicative.empty
+
+-- | Render a Show-able  value and return it
+--wrender
+--  :: (Monad m, Functor m, Show a,Monad (View view m), FormInput view) =>
+--     a -> View view m a
+--wrender x = (fromStr $ show x) ++> return x
+
+-- | Render raw view formatting. It is useful for displaying information.
+wraw :: Monad m => view -> View view m ()
+wraw x= View . return . FormElm x $ Just ()
++-- | True if the widget has no valid input+isEmpty :: Widget a -> Widget Bool
+isEmpty w= View $ do+  FormElm r mv <- runView w+  return $ FormElm r $ Just $ isNothing mv
+++-------------------------
+instance   FormInput Perch  where
+    fromStr = toElem
+    fromStrNoEncode  = toElem
+    ftag n v =  nelem n `child` v
+
+    attrs tag  [] = tag
+    attrs tag (nv:attribs) = attrs (attr tag nv) attribs
+
+    inred msg=  ftag "b" msg `attrs` [("style","color:red")]
+
+    finput n t v f c=
+       let
+        tag= ftag "input" mempty `attrs` [("type",  t), ("id",  n), ("value",  v)]
+        tag1= if f then tag `attrs` [("checked", "")] else tag
+       in case c of Just s -> tag1 `attrs` [("onclick", s)] ; _ -> tag1
+
+    ftextarea nam text=
+        ftag "textarea" mempty `attrs` [("id",  nam)] `child` text
+
+
+    fselect nam list = ftag "select" mempty `attrs` [("id", nam)] `child` list
+    foption  name v msel=
+      let tag=  ftag "option" mempty `attrs` [("value", name)]  `child`  v
+      in if msel then tag `attrs` [("selected", "")] else tag
+
+
+    formAction action method1 form = ftag "form" mempty `attrs` [("acceptCharset", "UTF-8")
+                                                         ,( "action", action)
+                                                         ,("method",  method1)]
+                                                         `child` form
+
+
+    flink  v str = ftag "a" mempty `attrs` [("href",  v)] `child` str
+
+-- | Get the session data of the desired type if there is any.
+getSessionData ::  (StateType m ~ MFlowState,MonadState m,Typeable a) =>  m (Maybe a)
+getSessionData =  resp where
+ resp= gets mfData >>= \list  ->
+    case M.lookup ( typeOf $ typeResp resp ) list of
+      Just x  -> return . Just $ unsafeCoerce x
+      Nothing -> return $ Nothing
+ typeResp :: m (Maybe x) -> x
+ typeResp= undefined
+
+-- | getSessionData specialized for the View monad. if Nothing, the monadic computation
+-- does not continue. getSData is a widget that does not validate when there is no data
+--  of that type in the session.
+getSData :: Typeable a =>Widget  a
+getSData= View $ do
+    r <- getSessionData
+    return $ FormElm mempty r
+
+--setSessionData ::  (StateType m ~ MFlowState, Typeable a) => a -> m ()  
+setSessionData  x=
+  modify $ \st -> st{mfData= M.insert  (typeOf x ) (unsafeCoerce x) (mfData st)}
+
+-- | a shorter name for setSessionData
+setSData ::  (StateType m ~ MFlowState, MonadState  m,Typeable a) => a -> m ()
+setSData= setSessionData
+
+delSessionData x=
+  modify $ \st -> st{mfData= M.delete (typeOf x ) (mfData st)}
+
+delSData :: (StateType m ~ MFlowState, MonadState  m,Typeable a) => a -> m ()
+delSData= delSessionData
+
+---------------------------
+data EvData =  NoData | Click Int (Int, Int) | Mouse (Int, Int) | Key Int deriving (Show,Eq)
+data EventData= EventData{ evName :: String, evData :: EvData} deriving Show
+
+eventData= unsafePerformIO . newMVar $ EventData "OnLoad" NoData
++resetEventData :: MonadIO m => m ()+resetEventData= liftIO . modifyMVar_ eventData . const . return $ EventData "Onload" NoData+
+getEventData :: MonadIO m => m EventData
+getEventData= liftIO $ readMVar eventData
++-- triggers the event when it happens in the widget.+--+-- What happens then?+--+-- 1)The event reexecutes all the monadic sentence where the widget is, (with no re-rendering)+--+-- 2) with the result of this reevaluaution, executes the rest of the monadic computation+--+-- 3) update the DOM tree with the rendering of the reevaluation in 2).+--+-- As usual, If one step of the monadic computation return empty, the reevaluation finish+-- So the effect of an event can be restricted as much as you may need.+--+-- Neither the computation nor the tree in the upstream flow is touched.+-- (unless you use out of stream directives, like `at`)+--+-- monadic computations inside monadic computations are executed following recursively+-- the steps mentioned above. So an event in a component deep down could or could not+-- trigger the reexecution of the rest of the whole.
+raiseEvent ::  Widget a -> Event IO b ->Widget a
+raiseEvent w event = View $ do
+ r <- gets process
+ case r of
+  EventF x f  -> do
+   FormElm render mx <- runView  w
+   let proc = x `addto` f  >> return ()
+   let nevent= evtName event :: String
+   let putevdata dat= modifyMVar_ eventData $ const $ return dat
+   let render' =  case event of
+        OnLoad    -> addEvent (render :: Perch) event $ putevdata (EventData nevent NoData) >> proc
+        OnUnload  -> addEvent (render :: Perch) event $ putevdata (EventData nevent NoData) >> proc
+        OnChange  -> addEvent (render :: Perch) event $ putevdata (EventData nevent NoData) >> proc
+        OnFocus   -> addEvent (render :: Perch) event $ putevdata (EventData nevent NoData) >> proc
+        OnBlur    -> addEvent (render :: Perch) event $ putevdata (EventData nevent NoData) >> proc
+
+        OnMouseMove -> addEvent (render :: Perch) event $ \(x,y) -> do
+                         putevdata $ EventData nevent $ Mouse(x,y)
+                         proc
+
+        OnMouseOver -> addEvent (render :: Perch) event $ \(x,y) -> do
+                         putevdata $  EventData nevent $ Mouse(x,y)
+                         proc
+
+        OnMouseOut -> addEvent (render :: Perch) event proc
+        OnClick -> addEvent (render :: Perch) event $ \i (x,y) -> do
+                         putevdata $  EventData nevent $ Click i (x,y)
+                         proc
+
+        OnDblClick -> addEvent (render :: Perch) event $ \i (x,y) -> do
+                         putevdata $ EventData nevent $ Click i (x,y)
+                         proc
+
+        OnMouseDown -> addEvent (render :: Perch) event $ \i (x,y) -> do
+                         putevdata $ EventData nevent $ Click i (x,y)
+                         proc
+
+        OnMouseUp -> addEvent (render :: Perch) event $ \i (x,y) -> do
+                         putevdata $ EventData nevent $ Click i (x,y)
+                         proc
+
+        OnKeyPress -> addEvent (render :: Perch) event $ \i -> do
+                         putevdata $ EventData nevent $ Key i
+                         proc
+
+        OnKeyUp  -> addEvent (render :: Perch) event $ \i -> do
+                         putevdata $ EventData nevent $ Key i
+                         proc
+
+        OnKeyDown -> addEvent (render :: Perch) event $ \i -> do
+                         putevdata $ EventData nevent $ Key i
+                         proc
+
+
+   return $ FormElm render' mx
+   where
+   addto f f'=  do
+     mr <- f
+     case mr of
+       Nothing -> return Nothing
+       Just x' ->  f' x'
+
+-- A shorter synonym for `raiseEvent`
+fire ::  Widget a -> Event IO b ->Widget a
+fire = raiseEvent++-- A shorter and smoother synonym for `raiseEvent`
+wake ::  Widget a -> Event IO b -> Widget a
+wake = raiseEvent++-- A professional synonym for `raiseEvent`+react :: Widget a -> Event IO b -> Widget a+react = raiseEvent++-- | pass trough only if the event is fired in this DOM element.+-- Otherwise, if the code is executing from a previous event, the computation will stop+pass :: Perch -> Event IO b -> Widget EventData+pass v event= do+        resetEventData+        wraw v `wake` event+        e@(EventData typ _) <- getEventData+        continueIf (evtName event== typ) e++-- | return empty and the monadic computation stop if the condition is false.+-- If true, return the second parameter.+continueIf :: Bool -> a -> Widget a+continueIf True x  = return x+continueIf False _ = empty+
+-- | executes a widget each t milliseconds until it validates and return ()
+wtimeout :: Int -> Widget () -> Widget ()
+wtimeout t w= View $ do
+    id <- genNewId
+    let f= setTimeout t $ do
+        me <- elemById  id
+        case me of
+         Nothing -> return ()
+         Just e ->do
+            r <- clearChildren e >> runWidget w e
+            case r of
+              Nothing -> f
+              Just ()  -> return ()
+
+    liftIO  f
+    runView $ identified id w
+
+
+globalState= unsafePerformIO $ newMVar mFlowState0
+
+-- run the widget as the content of a DOM element, the id is passed as parameter. All the+-- content of the element is erased previously
+runWidgetId :: Widget b -> ElemID  -> IO (Maybe b)
+runWidgetId ac id =  do
+
+   withElem id $  \e -> do
+      clearChildren e
+      runWidget ac e
+
+
+-- run the widget as the content of a DOM element
+runWidget :: Widget b -> Elem  -> IO (Maybe b)
+runWidget action e = do
+     st <- takeMVar globalState
+     (FormElm render mx, s) <- runStateT (runView action') st+     case fixed st of+       False -> build render e+       True  -> build (this `goParent` render)  e
+     return mx
+     where
+     action' = action <** -- force the execution of the code below, even if action fails
+        (View $ do
+          st <- get
+          liftIO $ putMVar globalState st{fixed= False}
+          return $ FormElm mempty Nothing)
++-- add a header content+addHeader :: Perch -> IO ()+addHeader format= do+    head <- getHead+    build format head+    return ()+    where+    getHead :: IO Elem+    getHead= ffi $ toJSStr "(function(){return document.head;})"++-- | run the widget as the body of the HTML+runBody :: Widget a -> IO (Maybe a)+runBody w= do+  body <- getBody+  (flip runWidget) body w+  where+  getBody :: IO Elem+  getBody= ffi $ toJSStr "(function(){return document.body;})"++data UpdateMethod= Append | Prepend | Insert deriving Show
+
++at :: ElemID -> UpdateMethod -> Widget a -> Widget  a
+at id method w= View $ do
+ FormElm render mx <- (runView w)+ return $ FormElm  (set  render)  mx+ where+ set render= liftIO $ do+         me <- elemById id+         case me of+          Nothing -> return ()+          Just e -> case method of+             Insert -> do+                     clearChildren e+                     build render e+                     return ()+             Append -> do+                     build render e+                     return ()+             Prepend -> do+                     es <- getChildren e+                     case es of+                       [] -> build render e >> return ()+                       e':es -> do+                             span <- newElem "span"+                             addChildBefore span e e'+                             build render span+                             return()+                     
+
+ src/Main.hs view
@@ -0,0 +1,363 @@+{-# LANGUAGE  DeriveDataTypeable #-}+module Main where+import Haste+import Haste.DOM(withElem)+import Haste.Foreign+import Haste.Prim+import Haste.Graphics.Canvas+import Haste.HPlay.View+import Haste.HPlay.Cell as Cell+import Haste.HPlay.Console+import Control.Applicative+import Control.Monad.State+import Control.Monad+import Data.Monoid+import Data.Typeable+import Prelude hiding (div,all,id,print,getChar, putStr, putStrLn,getLine)+import qualified Data.Map as V+import Data.Maybe+import Data.List(isInfixOf)+++main= runBody $ do  -- PerchM monad+      h1 ! style "text-align:center" $ "hplayground examples"+      h3 $ center $ do+         a ! href "https://github.com/agocorona/hplayground" $ "Git repository"+         toElem "   "+         a ! href "https://github.com/agocorona/hplayground/blob/master/src/Main.hs" $ "Examples code"+         toElem "   "+         a ! href "haskell-web.blogspot.com.es/2014/07/hplayground-translate-your-console.html" $ "Article"+    ++> do   -- Widget monad+        (table ! style "border-collapse:collapse"+                <<<(tr ! style "vertical-align:top"+                     <<< ( tds <<< sumTwo+                     <|>   tds <<< sumfold 3+                     <|>   tds <<< sumRecursive)+                <|> tr ! style "vertical-align:top"+                     <<<  (tds <<< (counter 3 <|> buttons <|> linksample)+                     <|>   tds <<< sumCell+                     <|>   tds <<< showpascal 4)+                <|> tr ! style "vertical-align:top"+                     <<<  (tds <<< formWidget+                     <|>   tds <<< palindrome+                     <|>   tds <<< naiveTodo)+                <|> tr ! style "vertical-align:top"+                     <<<  (tds <<< drawcanvas+                     <|>   tds <<< gallery+                     <|>   tds <<< mouse )++                   ))++        <++  b << "bottom of the page"+   where+   tds= td ! style "padding:15px;border-style:dotted"++-- Don't be scared by the operators:+-- <|> is the Alternantive combinator, to combine Widget() entries+-- and the <<< combinator simply encloses a widget within a HTML tag.+-- ++> prepend HTML to a widget+-- <++ postpend it++++sumTwo :: Widget ()+sumTwo = p  "This widget sum two numbers and append the result. Using applicative and monadic expressions" ++>+  (p <<< do+     r <- (+) <$> fromStr "first number"  ++> br+                   ++> inputInt Nothing `fire` OnKeyUp  <++ br+              <*> fromStr "second number " ++> br+                   ++> inputInt Nothing `fire` OnKeyUp  <++ br+     p <<< fromStr "result: " ++>  b (show r) ++> return())++  where+  less3 x= if x < 3 then return Nothing else  return . Just $ b " no more than 2 please"++sumRecursive :: Widget ()+sumRecursive = p  "This widget sum recursively n numbers. When enters 0, present the result" ++> sumr 0+  where+  sumr r=do+    r' <- inputInt Nothing `fire` OnKeyUp+    if r'== 0+      then  br ++> fromStr "result: " ++>  b (show r) ++> noWidget+      else do+        b (show $ r+r') ++> br ++> return ()+        sumr (r+r')++sumfold :: Int -> Widget ()+sumfold n =  p  ("This widget sum "++ show n ++" numbers and append the result using a fold") ++>+       (p <<< do+         r <- foldl (<>)  (return 0) . take n $ repeat $ inputInt Nothing `fire` OnKeyUp <++  br+         br ++> fromStr "result: " ++>  b (show r) ++> return ())++instance Monoid Int where+  mappend= (+)+  mempty= 0++++newtype Counter= Counter Int deriving Typeable++counter n = p "Two counters. One is pure and recursive, the other is stateful"+            ++> br ++> (center <<< (counter1 n <|> counter2 n))++ where+    -- a "pure" counter+    counter1 :: Int -> Widget ()+    counter1 n= (b (show n) ++> onemore)  `wcallback` (const $ counter1 $ n +1)++    onemore=  submitButton "+" `fire` OnClick+++    -- a stateful counter+    counter2 n = do+      onemore -- isEmpty (getSData :: Widget Counter ) <|> (onemore >> return True)+      Counter n <- getSData <|> return (Counter n)+      wraw $ b (show n)+      setSessionData . Counter $ n +1++++sumCell :: Widget ()++sumCell = p  "This widget sum recursively n numbers, but remember the\+          \ previos entries when one entry is edited" ++> sumr 0 0++ where+ sumr i r=do+     r' <- cell i+     b (show $ r+r') ++> br ++> return ()+     sumr (i +1) (r+r')++ cell i=  do+     stored <- Just <$> getNumber i <|> return Nothing+     r' <- inputInt stored `fire` OnKeyUp <|> fromM stored+     addNumber i r'+     return r'+   where+   addNumber i x= do+        xs <- getSData <|> return  V.empty+        setSData $ V.insert i x xs++   getNumber :: Int -> Widget Int+   getNumber i= do+        xs <- getSData+        case  V.lookup i xs of+          Nothing -> empty+          Just x  -> return x++   fromM Nothing = empty+   fromM (Just x) = return x++++-- pascal triangle http://www.haskell.org/haskellwiki/Blow_your_mind++pascal = iterate (\row -> zipWith (+) ([0] ++ row) (row ++ [0])) [1] :: [[Int]]++showpascal n= p << ("Show " ++ show n ++ " rows of the Pascal triangle ")+   ++> mconcat[p ! style "text-align:center" $ row | row <- take n pascal]+   ++> empty   -- the applicative empty === noWidget+++++drawcanvas :: Widget ()+drawcanvas=+ p << "This example draw a function of x between 10 and -10. You can define the function\+      \ using javascript expressions"  ++>++ (center <<< do+      let initial= "x*x+x+10;"+          sanitize str= if isInfixOf "alert" str then initial else str+      expr <- inputString (Just initial) `fire` OnKeyUp <++ br <|> return initial+      wraw $ canvas ! id "canvas"  $ noHtml+      wraw $ draw $sanitize expr)+++  where++  evalFormula :: String  -> IO Double+  evalFormula= ffi $ toJSString "(function(exp){ return eval(exp);})"++  draw expr= liftIO $ do+    Just can <- getCanvasById "canvas"+    let range= [-10..10]+        exprs = Prelude.map (\v -> subst 'x' (show v) expr) range+    ps <- mapM evalFormula  exprs+    render can $ scale (3,1) $ translate (50,130) $ rotate pi $ stroke $do+        line (-10,0) (10,0)+        line (0,30) (0,-30)+        path $ zip range ps++  subst _ _ []= []+  subst c v (c':cs)+    | c==c' =  v++ subst c v cs+    | otherwise= c':subst c v cs++++newtype GalleryIndex= G Int deriving Typeable++gallery :: Widget ()+gallery = p "this example show a image gallery. It advances each 20 seconds and by\+               \ pressing the button" ++>+ (wtimeout 20000 $ do+  G i <- getSData <|> return (G 0)+  let i' = if i == length gall-1  then 0 else  i+1+  setSData $ G i'+  wraw $ do+      img ! src (gall !! i) ! width "100%" ! height "100%"    -- raw Perch code+      br+  submitButton ">" `fire` OnClick+ `wcallback` \_ -> gallery)++  where+  gall=["http://almaer.com/blog/uploads/interview-haskell.png"+       ,"https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQmmC4kV3NPFIpGL_x4H_iHG_p-c93DGjWfkxVtjxEFVng7A8o-nw"+       ,"https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQ_ywj-zxDq3h_B4l48XHsjTywrdbK5egxvhxkYJ1HOkDFXd_-H"+       ,"https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcS53axpzkDyzEUAdaIP3YsaHuR-_YqN9qFK3W4bp_D2OBZfW5BU_Q"+       ,"https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSfP70npv4FOrkBjScP0tVu2t3veSNoFQ6MMxX6LDO8kldNeu-DxQ"+       ,"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRAgKkpDyzk8kdIqk5ECsZ14XgbpBzyWFvrCrHombkSBAUn6jFo"+       ]+++mouse :: Widget ()+mouse= do+    wraw (div  ! style "height:100px;background-color:lightgreen;position:relative" $ h1 "Mouse events here")+                            `fire` OnMouseOut+                            `fire` OnMouseOver+                            `fire` OnMouseDown+                            `fire` OnMouseMove+                            `fire` OnMouseUp+                            `fire` OnClick+                            `fire` OnDblClick+                            `fire` OnKeyPress+                            `fire` OnKeyDown+                            `fire` OnKeyUp+    evdata  <- getEventData+    wraw $ p << ( (evName evdata) ++" "++ show (evData evdata))++linksample= br ++> wlink "Hey!" (toElem "This link say Hey!")`fire` OnClick >>= \r -> wraw( b (" returns "++ r))++buttons= p "Different input elements:" ++> checkButton+                                       **> br ++> br+                                       ++> radio+                                       **> br ++> br+                                       ++> select+                                       <++ br+    where+    checkButton=do+       rs <- getCheckBoxes(+                       ((setCheckBox False "Red"    <++ b "red")   `fire` OnClick)+                    <> ((setCheckBox False "Green"  <++ b "green") `fire` OnClick)+                    <> ((setCheckBox False "blue"   <++ b "blue")  `fire` OnClick))+       wraw $ fromStr " returns: " <> b (show rs)++    radio= do+       r <- getRadio [\n -> fromStr v ++> setRadioActive v n | v <- ["red","green","blue"]]++       wraw $ fromStr " returns: " <> b ( show r )++    select= do+       r <- getSelect (   setOption "red"   (fromStr "red")  
+                      <|> setOption "green" (fromStr "green")+                      <|> setOption "blue"  (fromStr "blue"))+              `fire` OnClick++       wraw $ fromStr " returns: " <> b ( show r )++formWidget=  center <<< do -- PerchM monad+      p "Fields of a form appear in sequence. \+        \Some of the fields trigger events instantly. Some others use a button to trigger them. \+        \It also contains option buttons, radio buttons etc"+      p $ do+        toElem "This formulary is the same than the one "+        a ! href "http://mflowdemo.herokuapp.com/noscript/monadicwidgets/combination"+          $ "run in the server by MFlow"+  ++>+   do+      (n,s) <- (,) <$> p << "Who are you? "+                   ++> getString Nothing <! hint "name"     <++ br+                   <*> getString Nothing <! hint "surname"  <++ br+                   <** submitButton "ok" `fire` OnClick <++ br++      flag <- b << "Do you " ++> getRadio[radiob "work?",radiob "study?"] <++ br++      r<- case flag of+         "work?" -> Left  <$> b << "do you enjoy your work? "+                              ++> getBool True "yes" "no"+                              <** submitButton "ok" `fire` OnClick <++ br++         "study?"-> Right <$> b << "do you study in "+                              ++> getRadio[radiob "University"+                                          ,radiob "High School"]++      p << ("You are "++n++" "++s)++        ++> case r of+             Left fl ->   p << ("You work and it is " ++ show fl ++ " that you enjoy your work")+                            ++> noWidget++             Right stu -> p << ("You study at the " ++ stu)+                            ++> noWidget++  where+  hint s= [("placeholder",s)]+  radiob s n=  wlabel  (fromStr s) $ setRadioActive s n+++palindrome= p << "To search palindromes: one box present the other's reversed. It is also\+                 \ an example of cell usage" ++> do+ let entry= boxCell "entry" :: Cell String+     revEntry= boxCell "revEntry"++ r <- center <<< ((mk entry    Nothing `fire` OnKeyUp >>= return . Left) <++ br <|>+                  (mk revEntry Nothing `fire` OnKeyUp >>= return . Right))++ case r of+  Left s  -> do+   r  <- Cell.get entry >>= return . reverse+   revEntry .= r+  Right s -> do+   r' <- Cell.get revEntry >>= return . reverse+   entry .= r'+++newtype Tasks = Tasks [String] deriving Typeable++data TaskAction =  Done | Destroy++naiveTodo= do+ p $ do   -- PerchM monad+     toElem "Work in progress for a todo application to be added to "+     a ! href "http://todomvc.com" $ "todomvc.com"+ ++> todos++ where++ todos= center <<< h1 "todos" ++>+     do+      let entry = boxCell "todo"+      task <- mk entry Nothing `fire` OnKeyUp+      EventData _ (Key k) <- getEventData+      when( k == 13)  $ do+         entry .= ""+         Tasks tasks <- getSData <|> return (Tasks [])+         setSData . Tasks $ task:tasks++         at "list" Insert $ foldl (<|>) mempty [ display t | t <- (task:tasks)]+         return ()+     <|>+      wraw (div ! id "list" $ noHtml)++++ display task=  li <<< (do+  ch <- getCheckBoxes $ setCheckBox False "check" `fire` OnClick+  case ch of+        ["check"] -> wraw  $ b ! style "text-decoration:line-through;" $ task+        _         -> wraw  $ b task++                                  )++
+ src/Main.html view
@@ -0,0 +1,2139 @@+<!DOCTYPE HTML><html><head><title>main.html</title><meta charset="UTF-8"><script type="text/javascript">// This object will hold all exports.
+var Haste = {};
+
+/* Thunk
+   Creates a thunk representing the given closure.
+   Since we want automatic memoization of as many expressions as possible, we
+   use a JS object as a sort of tagged pointer, where the member x denotes the
+   object actually pointed to. If a "pointer" points to a thunk, it has a
+   member 't' which is set to true; if it points to a value, be it a function,
+   a value of an algebraic type of a primitive value, it has no member 't'.
+*/
+
+function T(f) {
+    this.f = new F(f);
+}
+
+function F(f) {
+    this.f = f;
+}
+
+/* Apply
+   Applies the function f to the arguments args. If the application is under-
+   saturated, a closure is returned, awaiting further arguments. If it is over-
+   saturated, the function is fully applied, and the result (assumed to be a
+   function) is then applied to the remaining arguments.
+*/
+function A(f, args) {
+    if(f instanceof T) {
+        f = E(f);
+    }
+    // Closure does some funny stuff with functions that occasionally
+    // results in non-functions getting applied, so we have to deal with
+    // it.
+    if(!(f instanceof Function)) {
+        return f;
+    }
+
+    if(f.arity === undefined) {
+        f.arity = f.length;
+    }
+    if(args.length === f.arity) {
+        switch(f.arity) {
+            case 0:  return f();
+            case 1:  return f(args[0]);
+            default: return f.apply(null, args);
+        }
+    } else if(args.length > f.arity) {
+        switch(f.arity) {
+            case 0:  return f();
+            case 1:  return A(f(args.shift()), args);
+            default: return A(f.apply(null, args.splice(0, f.arity)), args);
+        }
+    } else {
+        var g = function() {
+            return A(f, args.concat(Array.prototype.slice.call(arguments)));
+        };
+        g.arity = f.arity - args.length;
+        return g;
+    }
+}
+
+/* Eval
+   Evaluate the given thunk t into head normal form.
+   If the "thunk" we get isn't actually a thunk, just return it.
+*/
+function E(t) {
+    if(t instanceof T) {
+        if(t.f instanceof F) {
+            return t.f = t.f.f();
+        } else {
+            return t.f;
+        }
+    } else {
+        return t;
+    }
+}
+
+// Export Haste, A and E. Haste because we need to preserve exports, A and E
+// because they're handy for Haste.Foreign.
+if(!window) {
+    var window = {};
+}
+window['Haste'] = Haste;
+window['A'] = A;
+window['E'] = E;
+
+
+/* Throw an error.
+   We need to be able to use throw as an exception so we wrap it in a function.
+*/
+function die(err) {
+    throw err;
+}
+
+function quot(a, b) {
+    return (a-a%b)/b;
+}
+
+function quotRemI(a, b) {
+    return [0, (a-a%b)/b, a%b];
+}
+
+// 32 bit integer multiplication, with correct overflow behavior
+// note that |0 or >>>0 needs to be applied to the result, for int and word
+// respectively.
+function imul(a, b) {
+  // ignore high a * high a as the result will always be truncated
+  var lows = (a & 0xffff) * (b & 0xffff); // low a * low b
+  var aB = (a & 0xffff) * (b & 0xffff0000); // low a * high b
+  var bA = (a & 0xffff0000) * (b & 0xffff); // low b * high a
+  return lows + aB + bA; // sum will not exceed 52 bits, so it's safe
+}
+
+function addC(a, b) {
+    var x = a+b;
+    return [0, x & 0xffffffff, x > 0x7fffffff];
+}
+
+function subC(a, b) {
+    var x = a-b;
+    return [0, x & 0xffffffff, x < -2147483648];
+}
+
+function sinh (arg) {
+    return (Math.exp(arg) - Math.exp(-arg)) / 2;
+}
+
+function tanh (arg) {
+    return (Math.exp(arg) - Math.exp(-arg)) / (Math.exp(arg) + Math.exp(-arg));
+}
+
+function cosh (arg) {
+    return (Math.exp(arg) + Math.exp(-arg)) / 2;
+}
+
+// Scratch space for byte arrays.
+var rts_scratchBuf = new ArrayBuffer(8);
+var rts_scratchW32 = new Uint32Array(rts_scratchBuf);
+var rts_scratchFloat = new Float32Array(rts_scratchBuf);
+var rts_scratchDouble = new Float64Array(rts_scratchBuf);
+
+function decodeFloat(x) {
+    rts_scratchFloat[0] = x;
+    var sign = x < 0 ? -1 : 1;
+    var exp = ((rts_scratchW32[0] >> 23) & 0xff) - 150;
+    var man = rts_scratchW32[0] & 0x7fffff;
+    if(exp === 0) {
+        ++exp;
+    } else {
+        man |= (1 << 23);
+    }
+    return [0, sign*man, exp];
+}
+
+function decodeDouble(x) {
+    rts_scratchDouble[0] = x;
+    var sign = x < 0 ? -1 : 1;
+    var manHigh = rts_scratchW32[1] & 0xfffff;
+    var manLow = rts_scratchW32[0];
+    var exp = ((rts_scratchW32[1] >> 20) & 0x7ff) - 1075;
+    if(exp === 0) {
+        ++exp;
+    } else {
+        manHigh |= (1 << 20);
+    }
+    return [0, sign, manHigh, manLow, exp];
+}
+
+function isFloatFinite(x) {
+    return isFinite(x);
+}
+
+function isDoubleFinite(x) {
+    return isFinite(x);
+}
+
+function err(str) {
+    die(toJSStr(str));
+}
+
+/* unpackCString#
+   NOTE: update constructor tags if the code generator starts munging them.
+*/
+function unCStr(str) {return unAppCStr(str, [0]);}
+
+function unFoldrCStr(str, f, z) {
+    var acc = z;
+    for(var i = str.length-1; i >= 0; --i) {
+        acc = A(f, [[0, str.charCodeAt(i)], acc]);
+    }
+    return acc;
+}
+
+function unAppCStr(str, chrs) {
+    var i = arguments[2] ? arguments[2] : 0;
+    if(i >= str.length) {
+        return E(chrs);
+    } else {
+        return [1,[0,str.charCodeAt(i)],new T(function() {
+            return unAppCStr(str,chrs,i+1);
+        })];
+    }
+}
+
+function charCodeAt(str, i) {return str.charCodeAt(i);}
+
+function fromJSStr(str) {
+    return unCStr(E(str));
+}
+
+function toJSStr(hsstr) {
+    var s = '';
+    for(var str = E(hsstr); str[0] == 1; str = E(str[2])) {
+        s += String.fromCharCode(E(str[1])[1]);
+    }
+    return s;
+}
+
+// newMutVar
+function nMV(val) {
+    return ({x: val});
+}
+
+// readMutVar
+function rMV(mv) {
+    return mv.x;
+}
+
+// writeMutVar
+function wMV(mv, val) {
+    mv.x = val;
+}
+
+// atomicModifyMutVar
+function mMV(mv, f) {
+    var x = A(f, [mv.x]);
+    mv.x = x[1];
+    return x[2];
+}
+
+function localeEncoding() {
+    var le = newByteArr(5);
+    le['b']['i8'] = 'U'.charCodeAt(0);
+    le['b']['i8'] = 'T'.charCodeAt(0);
+    le['b']['i8'] = 'F'.charCodeAt(0);
+    le['b']['i8'] = '-'.charCodeAt(0);
+    le['b']['i8'] = '8'.charCodeAt(0);
+    return le;
+}
+
+var isDoubleNaN = isNaN;
+var isFloatNaN = isNaN;
+
+function isDoubleInfinite(d) {
+    return (d === Infinity);
+}
+var isFloatInfinite = isDoubleInfinite;
+
+function isDoubleNegativeZero(x) {
+    return (x===0 && (1/x)===-Infinity);
+}
+var isFloatNegativeZero = isDoubleNegativeZero;
+
+function strEq(a, b) {
+    return a == b;
+}
+
+function strOrd(a, b) {
+    if(a < b) {
+        return [0];
+    } else if(a == b) {
+        return [1];
+    }
+    return [2];
+}
+
+function jsCatch(act, handler) {
+    try {
+        return A(act,[0]);
+    } catch(e) {
+        return A(handler,[e, 0]);
+    }
+}
+
+var coercionToken = undefined;
+
+/* Haste represents constructors internally using 1 for the first constructor,
+   2 for the second, etc.
+   However, dataToTag should use 0, 1, 2, etc. Also, booleans might be unboxed.
+ */
+function dataToTag(x) {
+    if(x instanceof Array) {
+        return x[0];
+    } else {
+        return x;
+    }
+}
+
+function __word_encodeDouble(d, e) {
+    return d * Math.pow(2,e);
+}
+
+var __word_encodeFloat = __word_encodeDouble;
+var jsRound = Math.round; // Stupid GHC doesn't like periods in FFI IDs...
+var realWorld = undefined;
+if(typeof _ == 'undefined') {
+    var _ = undefined;
+}
+
+function popCnt(i) {
+    i = i - ((i >> 1) & 0x55555555);
+    i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
+    return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
+}
+
+function jsAlert(val) {
+    if(typeof alert != 'undefined') {
+        alert(val);
+    } else {
+        print(val);
+    }
+}
+
+function jsLog(val) {
+    console.log(val);
+}
+
+function jsPrompt(str) {
+    var val;
+    if(typeof prompt != 'undefined') {
+        val = prompt(str);
+    } else {
+        print(str);
+        val = readline();
+    }
+    return val == undefined ? '' : val.toString();
+}
+
+function jsEval(str) {
+    var x = eval(str);
+    return x == undefined ? '' : x.toString();
+}
+
+function isNull(obj) {
+    return obj === null;
+}
+
+function jsRead(str) {
+    return Number(str);
+}
+
+function jsShowI(val) {return val.toString();}
+function jsShow(val) {
+    var ret = val.toString();
+    return val == Math.round(val) ? ret + '.0' : ret;
+}
+
+function jsGetMouseCoords(e) {
+    var posx = 0;
+    var posy = 0;
+    if (!e) var e = window.event;
+    if (e.pageX || e.pageY) 	{
+	posx = e.pageX;
+	posy = e.pageY;
+    }
+    else if (e.clientX || e.clientY) 	{
+	posx = e.clientX + document.body.scrollLeft
+	    + document.documentElement.scrollLeft;
+	posy = e.clientY + document.body.scrollTop
+	    + document.documentElement.scrollTop;
+    }
+    return [posx - (e.target.offsetLeft || 0),
+	    posy - (e.target.offsetTop || 0)];
+}
+
+function jsSetCB(elem, evt, cb) {
+    // Count return press in single line text box as a change event.
+    if(evt == 'change' && elem.type.toLowerCase() == 'text') {
+        setCB(elem, 'keyup', function(k) {
+            if(k == '\n'.charCodeAt(0)) {
+                A(cb,[[0,k.keyCode],0]);
+            }
+        });
+    }
+
+    var fun;
+    switch(evt) {
+    case 'click':
+    case 'dblclick':
+    case 'mouseup':
+    case 'mousedown':
+        fun = function(x) {
+            var mpos = jsGetMouseCoords(x);
+            var mx = [0,mpos[0]];
+            var my = [0,mpos[1]];
+            A(cb,[[0,x.button],[0,mx,my],0]);
+        };
+        break;
+    case 'mousemove':
+    case 'mouseover':
+        fun = function(x) {
+            var mpos = jsGetMouseCoords(x);
+            var mx = [0,mpos[0]];
+            var my = [0,mpos[1]];
+            A(cb,[[0,mx,my],0]);
+        };
+        break;
+    case 'keypress':
+    case 'keyup':
+    case 'keydown':
+        fun = function(x) {A(cb,[[0,x.keyCode],0]);};
+        break;        
+    default:
+        fun = function() {A(cb,[0]);};
+        break;
+    }
+    return setCB(elem, evt, fun);
+}
+
+function setCB(elem, evt, cb) {
+    if(elem.addEventListener) {
+        elem.addEventListener(evt, cb, false);
+        return true;
+    } else if(elem.attachEvent) {
+        elem.attachEvent('on'+evt, cb);
+        return true;
+    }
+    return false;
+}
+
+function jsSetTimeout(msecs, cb) {
+    window.setTimeout(function() {A(cb,[0]);}, msecs);
+}
+
+function jsGet(elem, prop) {
+    return elem[prop].toString();
+}
+
+function jsSet(elem, prop, val) {
+    elem[prop] = val;
+}
+
+function jsGetAttr(elem, prop) {
+    if(elem.hasAttribute(prop)) {
+        return elem.getAttribute(prop).toString();
+    } else {
+        return "";
+    }
+}
+
+function jsSetAttr(elem, prop, val) {
+    elem.setAttribute(prop, val);
+}
+
+function jsGetStyle(elem, prop) {
+    return elem.style[prop].toString();
+}
+
+function jsSetStyle(elem, prop, val) {
+    elem.style[prop] = val;
+}
+
+function jsKillChild(child, parent) {
+    parent.removeChild(child);
+}
+
+function jsClearChildren(elem) {
+    while(elem.hasChildNodes()){
+        elem.removeChild(elem.lastChild);
+    }
+}
+
+function jsFind(elem) {
+    var e = document.getElementById(elem)
+    if(e) {
+        return [1,[0,e]];
+    }
+    return [0];
+}
+
+function jsCreateElem(tag) {
+    return document.createElement(tag);
+}
+
+function jsCreateTextNode(str) {
+    return document.createTextNode(str);
+}
+
+function jsGetChildBefore(elem) {
+    elem = elem.previousSibling;
+    while(elem) {
+        if(typeof elem.tagName != 'undefined') {
+            return [1,[0,elem]];
+        }
+        elem = elem.previousSibling;
+    }
+    return [0];
+}
+
+function jsGetLastChild(elem) {
+    var len = elem.childNodes.length;
+    for(var i = len-1; i >= 0; --i) {
+        if(typeof elem.childNodes[i].tagName != 'undefined') {
+            return [1,[0,elem.childNodes[i]]];
+        }
+    }
+    return [0];
+}
+
+
+function jsGetFirstChild(elem) {
+    var len = elem.childNodes.length;
+    for(var i = 0; i < len; i++) {
+        if(typeof elem.childNodes[i].tagName != 'undefined') {
+            return [1,[0,elem.childNodes[i]]];
+        }
+    }
+    return [0];
+}
+
+
+function jsGetChildren(elem) {
+    var children = [0];
+    var len = elem.childNodes.length;
+    for(var i = len-1; i >= 0; --i) {
+        if(typeof elem.childNodes[i].tagName != 'undefined') {
+            children = [1, [0,elem.childNodes[i]], children];
+        }
+    }
+    return children;
+}
+
+function jsSetChildren(elem, children) {
+    children = E(children);
+    jsClearChildren(elem, 0);
+    while(children[0] === 1) {
+        elem.appendChild(E(E(children[1])[1]));
+        children = E(children[2]);
+    }
+}
+
+function jsAppendChild(child, container) {
+    container.appendChild(child);
+}
+
+function jsAddChildBefore(child, container, after) {
+    container.insertBefore(child, after);
+}
+
+var jsRand = Math.random;
+
+// Concatenate a Haskell list of JS strings
+function jsCat(strs, sep) {
+    var arr = [];
+    strs = E(strs);
+    while(strs[0]) {
+        strs = E(strs);
+        arr.push(E(strs[1])[1]);
+        strs = E(strs[2]);
+    }
+    return arr.join(sep);
+}
+
+var jsJSONParse = JSON.parse;
+
+// JSON stringify a string
+function jsStringify(str) {
+    return JSON.stringify(str);
+}
+
+// Parse a JSON message into a Haste.JSON.JSON value.
+// As this pokes around inside Haskell values, it'll need to be updated if:
+// * Haste.JSON.JSON changes;
+// * E() starts to choke on non-thunks;
+// * data constructor code generation changes; or
+// * Just and Nothing change tags.
+function jsParseJSON(str) {
+    try {
+        var js = JSON.parse(str);
+        var hs = toHS(js);
+    } catch(_) {
+        return [0];
+    }
+    return [1,hs];
+}
+
+function toHS(obj) {
+    switch(typeof obj) {
+    case 'number':
+        return [0, [0, jsRead(obj)]];
+    case 'string':
+        return [1, [0, obj]];
+        break;
+    case 'boolean':
+        return [2, obj]; // Booleans are special wrt constructor tags!
+        break;
+    case 'object':
+        if(obj instanceof Array) {
+            return [3, arr2lst_json(obj, 0)];
+        } else {
+            // Object type but not array - it's a dictionary.
+            // The RFC doesn't say anything about the ordering of keys, but
+            // considering that lots of people rely on keys being "in order" as
+            // defined by "the same way someone put them in at the other end,"
+            // it's probably a good idea to put some cycles into meeting their
+            // misguided expectations.
+            var ks = [];
+            for(var k in obj) {
+                ks.unshift(k);
+            }
+            var xs = [0];
+            for(var i = 0; i < ks.length; i++) {
+                xs = [1, [0, [0,ks[i]], toHS(obj[ks[i]])], xs];
+            }
+            return [4, xs];
+        }
+    }
+}
+
+function arr2lst_json(arr, elem) {
+    if(elem >= arr.length) {
+        return [0];
+    }
+    return [1, toHS(arr[elem]), new T(function() {return arr2lst_json(arr,elem+1);})]
+}
+
+function arr2lst(arr, elem) {
+    if(elem >= arr.length) {
+        return [0];
+    }
+    return [1, arr[elem], new T(function() {return arr2lst(arr,elem+1);})]
+}
+
+function lst2arr(xs) {
+    var arr = [];
+    for(; xs[0]; xs = E(xs[2])) {
+        arr.push(E(xs[1]));
+    }
+    return arr;
+}
+
+function ajaxReq(method, url, async, postdata, cb) {
+    var xhr = new XMLHttpRequest();
+    xhr.open(method, url, async);
+    xhr.setRequestHeader('Cache-control', 'no-cache');
+    xhr.onreadystatechange = function() {
+        if(xhr.readyState == 4) {
+            if(xhr.status == 200) {
+                A(cb,[[1,[0,xhr.responseText]],0]);
+            } else {
+                A(cb,[[0],0]); // Nothing
+            }
+        }
+    }
+    xhr.send(postdata);
+}
+
+// Create a little endian ArrayBuffer representation of something.
+function toABHost(v, n, x) {
+    var a = new ArrayBuffer(n);
+    new window[v](a)[0] = x;
+    return a;
+}
+
+function toABSwap(v, n, x) {
+    var a = new ArrayBuffer(n);
+    new window[v](a)[0] = x;
+    var bs = new Uint8Array(a);
+    for(var i = 0, j = n-1; i < j; ++i, --j) {
+        var tmp = bs[i];
+        bs[i] = bs[j];
+        bs[j] = tmp;
+    }
+    return a;
+}
+
+window['toABle'] = toABHost;
+window['toABbe'] = toABSwap;
+
+// Swap byte order if host is not little endian.
+var buffer = new ArrayBuffer(2);
+new DataView(buffer).setInt16(0, 256, true);
+if(new Int16Array(buffer)[0] !== 256) {
+    window['toABle'] = toABSwap;
+    window['toABbe'] = toABHost;
+}
+
+// MVar implementation.
+// Since Haste isn't concurrent, takeMVar and putMVar don't block on empty
+// and full MVars respectively, but terminate the program since they would
+// otherwise be blocking forever.
+
+function newMVar() {
+    return ({empty: true});
+}
+
+function tryTakeMVar(mv) {
+    if(mv.empty) {
+        return [0, 0, undefined];
+    } else {
+        var val = mv.x;
+        mv.empty = true;
+        mv.x = null;
+        return [0, 1, val];
+    }
+}
+
+function takeMVar(mv) {
+    if(mv.empty) {
+        // TODO: real BlockedOnDeadMVar exception, perhaps?
+        err("Attempted to take empty MVar!");
+    }
+    var val = mv.x;
+    mv.empty = true;
+    mv.x = null;
+    return val;
+}
+
+function putMVar(mv, val) {
+    if(!mv.empty) {
+        // TODO: real BlockedOnDeadMVar exception, perhaps?
+        err("Attempted to put full MVar!");
+    }
+    mv.empty = false;
+    mv.x = val;
+}
+
+function tryPutMVar(mv, val) {
+    if(!mv.empty) {
+        return 0;
+    } else {
+        mv.empty = false;
+        mv.x = val;
+        return 1;
+    }
+}
+
+function sameMVar(a, b) {
+    return (a == b);
+}
+
+function isEmptyMVar(mv) {
+    return mv.empty ? 1 : 0;
+}
+
+// Implementation of stable names.
+// Unlike native GHC, the garbage collector isn't going to move data around
+// in a way that we can detect, so each object could serve as its own stable
+// name if it weren't for the fact we can't turn a JS reference into an
+// integer.
+// So instead, each object has a unique integer attached to it, which serves
+// as its stable name.
+
+var __next_stable_name = 1;
+
+function makeStableName(x) {
+    if(!x.stableName) {
+        x.stableName = __next_stable_name;
+        __next_stable_name += 1;
+    }
+    return x.stableName;
+}
+
+function eqStableName(x, y) {
+    return (x == y) ? 1 : 0;
+}
+
+var Integer = function(bits, sign) {
+  this.bits_ = [];
+  this.sign_ = sign;
+
+  var top = true;
+  for (var i = bits.length - 1; i >= 0; i--) {
+    var val = bits[i] | 0;
+    if (!top || val != sign) {
+      this.bits_[i] = val;
+      top = false;
+    }
+  }
+};
+
+Integer.IntCache_ = {};
+
+var I_fromInt = function(value) {
+  if (-128 <= value && value < 128) {
+    var cachedObj = Integer.IntCache_[value];
+    if (cachedObj) {
+      return cachedObj;
+    }
+  }
+
+  var obj = new Integer([value | 0], value < 0 ? -1 : 0);
+  if (-128 <= value && value < 128) {
+    Integer.IntCache_[value] = obj;
+  }
+  return obj;
+};
+
+var I_fromNumber = function(value) {
+  if (isNaN(value) || !isFinite(value)) {
+    return Integer.ZERO;
+  } else if (value < 0) {
+    return I_negate(I_fromNumber(-value));
+  } else {
+    var bits = [];
+    var pow = 1;
+    for (var i = 0; value >= pow; i++) {
+      bits[i] = (value / pow) | 0;
+      pow *= Integer.TWO_PWR_32_DBL_;
+    }
+    return new Integer(bits, 0);
+  }
+};
+
+var I_fromBits = function(bits) {
+  var high = bits[bits.length - 1];
+  return new Integer(bits, high & (1 << 31) ? -1 : 0);
+};
+
+var I_fromString = function(str, opt_radix) {
+  if (str.length == 0) {
+    throw Error('number format error: empty string');
+  }
+
+  var radix = opt_radix || 10;
+  if (radix < 2 || 36 < radix) {
+    throw Error('radix out of range: ' + radix);
+  }
+
+  if (str.charAt(0) == '-') {
+    return I_negate(I_fromString(str.substring(1), radix));
+  } else if (str.indexOf('-') >= 0) {
+    throw Error('number format error: interior "-" character');
+  }
+
+  var radixToPower = I_fromNumber(Math.pow(radix, 8));
+
+  var result = Integer.ZERO;
+  for (var i = 0; i < str.length; i += 8) {
+    var size = Math.min(8, str.length - i);
+    var value = parseInt(str.substring(i, i + size), radix);
+    if (size < 8) {
+      var power = I_fromNumber(Math.pow(radix, size));
+      result = I_add(I_mul(result, power), I_fromNumber(value));
+    } else {
+      result = I_mul(result, radixToPower);
+      result = I_add(result, I_fromNumber(value));
+    }
+  }
+  return result;
+};
+
+
+Integer.TWO_PWR_32_DBL_ = (1 << 16) * (1 << 16);
+Integer.ZERO = I_fromInt(0);
+Integer.ONE = I_fromInt(1);
+Integer.TWO_PWR_24_ = I_fromInt(1 << 24);
+
+var I_toInt = function(self) {
+  return self.bits_.length > 0 ? self.bits_[0] : self.sign_;
+};
+
+var I_toWord = function(self) {
+  return I_toInt(self) >>> 0;
+};
+
+var I_toNumber = function(self) {
+  if (isNegative(self)) {
+    return -I_toNumber(I_negate(self));
+  } else {
+    var val = 0;
+    var pow = 1;
+    for (var i = 0; i < self.bits_.length; i++) {
+      val += I_getBitsUnsigned(self, i) * pow;
+      pow *= Integer.TWO_PWR_32_DBL_;
+    }
+    return val;
+  }
+};
+
+var I_getBits = function(self, index) {
+  if (index < 0) {
+    return 0;
+  } else if (index < self.bits_.length) {
+    return self.bits_[index];
+  } else {
+    return self.sign_;
+  }
+};
+
+var I_getBitsUnsigned = function(self, index) {
+  var val = I_getBits(self, index);
+  return val >= 0 ? val : Integer.TWO_PWR_32_DBL_ + val;
+};
+
+var getSign = function(self) {
+  return self.sign_;
+};
+
+var isZero = function(self) {
+  if (self.sign_ != 0) {
+    return false;
+  }
+  for (var i = 0; i < self.bits_.length; i++) {
+    if (self.bits_[i] != 0) {
+      return false;
+    }
+  }
+  return true;
+};
+
+var isNegative = function(self) {
+  return self.sign_ == -1;
+};
+
+var isOdd = function(self) {
+  return (self.bits_.length == 0) && (self.sign_ == -1) ||
+         (self.bits_.length > 0) && ((self.bits_[0] & 1) != 0);
+};
+
+var I_equals = function(self, other) {
+  if (self.sign_ != other.sign_) {
+    return false;
+  }
+  var len = Math.max(self.bits_.length, other.bits_.length);
+  for (var i = 0; i < len; i++) {
+    if (I_getBits(self, i) != I_getBits(other, i)) {
+      return false;
+    }
+  }
+  return true;
+};
+
+var I_notEquals = function(self, other) {
+  return !I_equals(self, other);
+};
+
+var I_greaterThan = function(self, other) {
+  return I_compare(self, other) > 0;
+};
+
+var I_greaterThanOrEqual = function(self, other) {
+  return I_compare(self, other) >= 0;
+};
+
+var I_lessThan = function(self, other) {
+  return I_compare(self, other) < 0;
+};
+
+var I_lessThanOrEqual = function(self, other) {
+  return I_compare(self, other) <= 0;
+};
+
+var I_compare = function(self, other) {
+  var diff = I_sub(self, other);
+  if (isNegative(diff)) {
+    return -1;
+  } else if (isZero(diff)) {
+    return 0;
+  } else {
+    return +1;
+  }
+};
+
+var I_compareInt = function(self, other) {
+  return I_compare(self, I_fromInt(other));
+}
+
+var shorten = function(self, numBits) {
+  var arr_index = (numBits - 1) >> 5;
+  var bit_index = (numBits - 1) % 32;
+  var bits = [];
+  for (var i = 0; i < arr_index; i++) {
+    bits[i] = I_getBits(self, i);
+  }
+  var sigBits = bit_index == 31 ? 0xFFFFFFFF : (1 << (bit_index + 1)) - 1;
+  var val = I_getBits(self, arr_index) & sigBits;
+  if (val & (1 << bit_index)) {
+    val |= 0xFFFFFFFF - sigBits;
+    bits[arr_index] = val;
+    return new Integer(bits, -1);
+  } else {
+    bits[arr_index] = val;
+    return new Integer(bits, 0);
+  }
+};
+
+var I_negate = function(self) {
+  return I_add(not(self), Integer.ONE);
+};
+
+var I_add = function(self, other) {
+  var len = Math.max(self.bits_.length, other.bits_.length);
+  var arr = [];
+  var carry = 0;
+
+  for (var i = 0; i <= len; i++) {
+    var a1 = I_getBits(self, i) >>> 16;
+    var a0 = I_getBits(self, i) & 0xFFFF;
+
+    var b1 = I_getBits(other, i) >>> 16;
+    var b0 = I_getBits(other, i) & 0xFFFF;
+
+    var c0 = carry + a0 + b0;
+    var c1 = (c0 >>> 16) + a1 + b1;
+    carry = c1 >>> 16;
+    c0 &= 0xFFFF;
+    c1 &= 0xFFFF;
+    arr[i] = (c1 << 16) | c0;
+  }
+  return I_fromBits(arr);
+};
+
+var I_sub = function(self, other) {
+  return I_add(self, I_negate(other));
+};
+
+var I_mul = function(self, other) {
+  if (isZero(self)) {
+    return Integer.ZERO;
+  } else if (isZero(other)) {
+    return Integer.ZERO;
+  }
+
+  if (isNegative(self)) {
+    if (isNegative(other)) {
+      return I_mul(I_negate(self), I_negate(other));
+    } else {
+      return I_negate(I_mul(I_negate(self), other));
+    }
+  } else if (isNegative(other)) {
+    return I_negate(I_mul(self, I_negate(other)));
+  }
+
+  if (I_lessThan(self, Integer.TWO_PWR_24_) &&
+      I_lessThan(other, Integer.TWO_PWR_24_)) {
+    return I_fromNumber(I_toNumber(self) * I_toNumber(other));
+  }
+
+  var len = self.bits_.length + other.bits_.length;
+  var arr = [];
+  for (var i = 0; i < 2 * len; i++) {
+    arr[i] = 0;
+  }
+  for (var i = 0; i < self.bits_.length; i++) {
+    for (var j = 0; j < other.bits_.length; j++) {
+      var a1 = I_getBits(self, i) >>> 16;
+      var a0 = I_getBits(self, i) & 0xFFFF;
+
+      var b1 = I_getBits(other, j) >>> 16;
+      var b0 = I_getBits(other, j) & 0xFFFF;
+
+      arr[2 * i + 2 * j] += a0 * b0;
+      Integer.carry16_(arr, 2 * i + 2 * j);
+      arr[2 * i + 2 * j + 1] += a1 * b0;
+      Integer.carry16_(arr, 2 * i + 2 * j + 1);
+      arr[2 * i + 2 * j + 1] += a0 * b1;
+      Integer.carry16_(arr, 2 * i + 2 * j + 1);
+      arr[2 * i + 2 * j + 2] += a1 * b1;
+      Integer.carry16_(arr, 2 * i + 2 * j + 2);
+    }
+  }
+
+  for (var i = 0; i < len; i++) {
+    arr[i] = (arr[2 * i + 1] << 16) | arr[2 * i];
+  }
+  for (var i = len; i < 2 * len; i++) {
+    arr[i] = 0;
+  }
+  return new Integer(arr, 0);
+};
+
+Integer.carry16_ = function(bits, index) {
+  while ((bits[index] & 0xFFFF) != bits[index]) {
+    bits[index + 1] += bits[index] >>> 16;
+    bits[index] &= 0xFFFF;
+  }
+};
+
+var I_mod = function(self, other) {
+  return I_rem(I_add(other, I_rem(self, other)), other);
+}
+
+var I_div = function(self, other) {
+  if(I_greaterThan(self, Integer.ZERO) != I_greaterThan(other, Integer.ZERO)) {
+    if(I_rem(self, other) != Integer.ZERO) {
+      return I_sub(I_quot(self, other), Integer.ONE);
+    }
+  }
+  return I_quot(self, other);
+}
+
+var I_quotRem = function(self, other) {
+  return [0, I_quot(self, other), I_rem(self, other)];
+}
+
+var I_divMod = function(self, other) {
+  return [0, I_div(self, other), I_mod(self, other)];
+}
+
+var I_quot = function(self, other) {
+  if (isZero(other)) {
+    throw Error('division by zero');
+  } else if (isZero(self)) {
+    return Integer.ZERO;
+  }
+
+  if (isNegative(self)) {
+    if (isNegative(other)) {
+      return I_quot(I_negate(self), I_negate(other));
+    } else {
+      return I_negate(I_quot(I_negate(self), other));
+    }
+  } else if (isNegative(other)) {
+    return I_negate(I_quot(self, I_negate(other)));
+  }
+
+  var res = Integer.ZERO;
+  var rem = self;
+  while (I_greaterThanOrEqual(rem, other)) {
+    var approx = Math.max(1, Math.floor(I_toNumber(rem) / I_toNumber(other)));
+    var log2 = Math.ceil(Math.log(approx) / Math.LN2);
+    var delta = (log2 <= 48) ? 1 : Math.pow(2, log2 - 48);
+    var approxRes = I_fromNumber(approx);
+    var approxRem = I_mul(approxRes, other);
+    while (isNegative(approxRem) || I_greaterThan(approxRem, rem)) {
+      approx -= delta;
+      approxRes = I_fromNumber(approx);
+      approxRem = I_mul(approxRes, other);
+    }
+
+    if (isZero(approxRes)) {
+      approxRes = Integer.ONE;
+    }
+
+    res = I_add(res, approxRes);
+    rem = I_sub(rem, approxRem);
+  }
+  return res;
+};
+
+var I_rem = function(self, other) {
+  return I_sub(self, I_mul(I_quot(self, other), other));
+};
+
+var not = function(self) {
+  var len = self.bits_.length;
+  var arr = [];
+  for (var i = 0; i < len; i++) {
+    arr[i] = ~self.bits_[i];
+  }
+  return new Integer(arr, ~self.sign_);
+};
+
+var I_and = function(self, other) {
+  var len = Math.max(self.bits_.length, other.bits_.length);
+  var arr = [];
+  for (var i = 0; i < len; i++) {
+    arr[i] = I_getBits(self, i) & I_getBits(other, i);
+  }
+  return new Integer(arr, self.sign_ & other.sign_);
+};
+
+var I_or = function(self, other) {
+  var len = Math.max(self.bits_.length, other.bits_.length);
+  var arr = [];
+  for (var i = 0; i < len; i++) {
+    arr[i] = I_getBits(self, i) | I_getBits(other, i);
+  }
+  return new Integer(arr, self.sign_ | other.sign_);
+};
+
+var I_xor = function(self, other) {
+  var len = Math.max(self.bits_.length, other.bits_.length);
+  var arr = [];
+  for (var i = 0; i < len; i++) {
+    arr[i] = I_getBits(self, i) ^ I_getBits(other, i);
+  }
+  return new Integer(arr, self.sign_ ^ other.sign_);
+};
+
+var I_shiftLeft = function(self, numBits) {
+  var arr_delta = numBits >> 5;
+  var bit_delta = numBits % 32;
+  var len = self.bits_.length + arr_delta + (bit_delta > 0 ? 1 : 0);
+  var arr = [];
+  for (var i = 0; i < len; i++) {
+    if (bit_delta > 0) {
+      arr[i] = (I_getBits(self, i - arr_delta) << bit_delta) |
+               (I_getBits(self, i - arr_delta - 1) >>> (32 - bit_delta));
+    } else {
+      arr[i] = I_getBits(self, i - arr_delta);
+    }
+  }
+  return new Integer(arr, self.sign_);
+};
+
+var I_shiftRight = function(self, numBits) {
+  var arr_delta = numBits >> 5;
+  var bit_delta = numBits % 32;
+  var len = self.bits_.length - arr_delta;
+  var arr = [];
+  for (var i = 0; i < len; i++) {
+    if (bit_delta > 0) {
+      arr[i] = (I_getBits(self, i + arr_delta) >>> bit_delta) |
+               (I_getBits(self, i + arr_delta + 1) << (32 - bit_delta));
+    } else {
+      arr[i] = I_getBits(self, i + arr_delta);
+    }
+  }
+  return new Integer(arr, self.sign_);
+};
+
+var I_signum = function(self) {
+  var cmp = I_compare(self, Integer.ZERO);
+  if(cmp > 0) {
+    return Integer.ONE
+  }
+  if(cmp < 0) {
+    return I_sub(Integer.ZERO, Integer.ONE);
+  }
+  return Integer.ZERO;
+};
+
+var I_abs = function(self) {
+  if(I_compare(self, Integer.ZERO) < 0) {
+    return I_sub(Integer.ZERO, self);
+  }
+  return self;
+};
+
+var I_decodeDouble = function(x) {
+  var dec = decodeDouble(x);
+  var mantissa = I_fromBits([dec[3], dec[2]]);
+  if(dec[1] < 0) {
+    mantissa = I_negate(mantissa);
+  }
+  return [0, dec[4], mantissa];
+}
+
+var I_toString = function(self) {
+  var radix = 10;
+
+  if (isZero(self)) {
+    return '0';
+  } else if (isNegative(self)) {
+    return '-' + I_toString(I_negate(self));
+  }
+
+  var radixToPower = I_fromNumber(Math.pow(radix, 6));
+
+  var rem = self;
+  var result = '';
+  while (true) {
+    var remDiv = I_div(rem, radixToPower);
+    var intval = I_toInt(I_sub(rem, I_mul(remDiv, radixToPower)));
+    var digits = intval.toString();
+
+    rem = remDiv;
+    if (isZero(rem)) {
+      return digits + result;
+    } else {
+      while (digits.length < 6) {
+        digits = '0' + digits;
+      }
+      result = '' + digits + result;
+    }
+  }
+};
+
+var I_fromRat = function(a, b) {
+    return I_toNumber(a) / I_toNumber(b);
+}
+
+function I_fromInt64(x) {
+    return I_fromBits([x.getLowBits(), x.getHighBits()]);
+}
+
+function I_toInt64(x) {
+    return Long.fromBits(I_getBits(x, 0), I_getBits(x, 1));
+}
+
+function I_fromWord64(x) {
+    return x;
+}
+
+function I_toWord64(x) {
+    return I_rem(I_add(__w64_max, x), __w64_max);
+}
+
+// Copyright 2009 The Closure Library Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS-IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+var Long = function(low, high) {
+  this.low_ = low | 0;
+  this.high_ = high | 0;
+};
+
+Long.IntCache_ = {};
+
+Long.fromInt = function(value) {
+  if (-128 <= value && value < 128) {
+    var cachedObj = Long.IntCache_[value];
+    if (cachedObj) {
+      return cachedObj;
+    }
+  }
+
+  var obj = new Long(value | 0, value < 0 ? -1 : 0);
+  if (-128 <= value && value < 128) {
+    Long.IntCache_[value] = obj;
+  }
+  return obj;
+};
+
+Long.fromNumber = function(value) {
+  if (isNaN(value) || !isFinite(value)) {
+    return Long.ZERO;
+  } else if (value <= -Long.TWO_PWR_63_DBL_) {
+    return Long.MIN_VALUE;
+  } else if (value + 1 >= Long.TWO_PWR_63_DBL_) {
+    return Long.MAX_VALUE;
+  } else if (value < 0) {
+    return Long.fromNumber(-value).negate();
+  } else {
+    return new Long(
+        (value % Long.TWO_PWR_32_DBL_) | 0,
+        (value / Long.TWO_PWR_32_DBL_) | 0);
+  }
+};
+
+Long.fromBits = function(lowBits, highBits) {
+  return new Long(lowBits, highBits);
+};
+
+Long.TWO_PWR_16_DBL_ = 1 << 16;
+Long.TWO_PWR_24_DBL_ = 1 << 24;
+Long.TWO_PWR_32_DBL_ =
+    Long.TWO_PWR_16_DBL_ * Long.TWO_PWR_16_DBL_;
+Long.TWO_PWR_31_DBL_ =
+    Long.TWO_PWR_32_DBL_ / 2;
+Long.TWO_PWR_48_DBL_ =
+    Long.TWO_PWR_32_DBL_ * Long.TWO_PWR_16_DBL_;
+Long.TWO_PWR_64_DBL_ =
+    Long.TWO_PWR_32_DBL_ * Long.TWO_PWR_32_DBL_;
+Long.TWO_PWR_63_DBL_ =
+    Long.TWO_PWR_64_DBL_ / 2;
+Long.ZERO = Long.fromInt(0);
+Long.ONE = Long.fromInt(1);
+Long.NEG_ONE = Long.fromInt(-1);
+Long.MAX_VALUE =
+    Long.fromBits(0xFFFFFFFF | 0, 0x7FFFFFFF | 0);
+Long.MIN_VALUE = Long.fromBits(0, 0x80000000 | 0);
+Long.TWO_PWR_24_ = Long.fromInt(1 << 24);
+
+Long.prototype.toInt = function() {
+  return this.low_;
+};
+
+Long.prototype.toNumber = function() {
+  return this.high_ * Long.TWO_PWR_32_DBL_ +
+         this.getLowBitsUnsigned();
+};
+
+Long.prototype.getHighBits = function() {
+  return this.high_;
+};
+
+Long.prototype.getLowBits = function() {
+  return this.low_;
+};
+
+Long.prototype.getLowBitsUnsigned = function() {
+  return (this.low_ >= 0) ?
+      this.low_ : Long.TWO_PWR_32_DBL_ + this.low_;
+};
+
+Long.prototype.isZero = function() {
+  return this.high_ == 0 && this.low_ == 0;
+};
+
+Long.prototype.isNegative = function() {
+  return this.high_ < 0;
+};
+
+Long.prototype.isOdd = function() {
+  return (this.low_ & 1) == 1;
+};
+
+Long.prototype.equals = function(other) {
+  return (this.high_ == other.high_) && (this.low_ == other.low_);
+};
+
+Long.prototype.notEquals = function(other) {
+  return (this.high_ != other.high_) || (this.low_ != other.low_);
+};
+
+Long.prototype.lessThan = function(other) {
+  return this.compare(other) < 0;
+};
+
+Long.prototype.lessThanOrEqual = function(other) {
+  return this.compare(other) <= 0;
+};
+
+Long.prototype.greaterThan = function(other) {
+  return this.compare(other) > 0;
+};
+
+Long.prototype.greaterThanOrEqual = function(other) {
+  return this.compare(other) >= 0;
+};
+
+Long.prototype.compare = function(other) {
+  if (this.equals(other)) {
+    return 0;
+  }
+
+  var thisNeg = this.isNegative();
+  var otherNeg = other.isNegative();
+  if (thisNeg && !otherNeg) {
+    return -1;
+  }
+  if (!thisNeg && otherNeg) {
+    return 1;
+  }
+
+  if (this.subtract(other).isNegative()) {
+    return -1;
+  } else {
+    return 1;
+  }
+};
+
+Long.prototype.negate = function() {
+  if (this.equals(Long.MIN_VALUE)) {
+    return Long.MIN_VALUE;
+  } else {
+    return this.not().add(Long.ONE);
+  }
+};
+
+Long.prototype.add = function(other) {
+  var a48 = this.high_ >>> 16;
+  var a32 = this.high_ & 0xFFFF;
+  var a16 = this.low_ >>> 16;
+  var a00 = this.low_ & 0xFFFF;
+
+  var b48 = other.high_ >>> 16;
+  var b32 = other.high_ & 0xFFFF;
+  var b16 = other.low_ >>> 16;
+  var b00 = other.low_ & 0xFFFF;
+
+  var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
+  c00 += a00 + b00;
+  c16 += c00 >>> 16;
+  c00 &= 0xFFFF;
+  c16 += a16 + b16;
+  c32 += c16 >>> 16;
+  c16 &= 0xFFFF;
+  c32 += a32 + b32;
+  c48 += c32 >>> 16;
+  c32 &= 0xFFFF;
+  c48 += a48 + b48;
+  c48 &= 0xFFFF;
+  return Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32);
+};
+
+Long.prototype.subtract = function(other) {
+  return this.add(other.negate());
+};
+
+Long.prototype.multiply = function(other) {
+  if (this.isZero()) {
+    return Long.ZERO;
+  } else if (other.isZero()) {
+    return Long.ZERO;
+  }
+
+  if (this.equals(Long.MIN_VALUE)) {
+    return other.isOdd() ? Long.MIN_VALUE : Long.ZERO;
+  } else if (other.equals(Long.MIN_VALUE)) {
+    return this.isOdd() ? Long.MIN_VALUE : Long.ZERO;
+  }
+
+  if (this.isNegative()) {
+    if (other.isNegative()) {
+      return this.negate().multiply(other.negate());
+    } else {
+      return this.negate().multiply(other).negate();
+    }
+  } else if (other.isNegative()) {
+    return this.multiply(other.negate()).negate();
+  }
+
+  if (this.lessThan(Long.TWO_PWR_24_) &&
+      other.lessThan(Long.TWO_PWR_24_)) {
+    return Long.fromNumber(this.toNumber() * other.toNumber());
+  }
+
+  var a48 = this.high_ >>> 16;
+  var a32 = this.high_ & 0xFFFF;
+  var a16 = this.low_ >>> 16;
+  var a00 = this.low_ & 0xFFFF;
+
+  var b48 = other.high_ >>> 16;
+  var b32 = other.high_ & 0xFFFF;
+  var b16 = other.low_ >>> 16;
+  var b00 = other.low_ & 0xFFFF;
+
+  var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
+  c00 += a00 * b00;
+  c16 += c00 >>> 16;
+  c00 &= 0xFFFF;
+  c16 += a16 * b00;
+  c32 += c16 >>> 16;
+  c16 &= 0xFFFF;
+  c16 += a00 * b16;
+  c32 += c16 >>> 16;
+  c16 &= 0xFFFF;
+  c32 += a32 * b00;
+  c48 += c32 >>> 16;
+  c32 &= 0xFFFF;
+  c32 += a16 * b16;
+  c48 += c32 >>> 16;
+  c32 &= 0xFFFF;
+  c32 += a00 * b32;
+  c48 += c32 >>> 16;
+  c32 &= 0xFFFF;
+  c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;
+  c48 &= 0xFFFF;
+  return Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32);
+};
+
+Long.prototype.div = function(other) {
+  if (other.isZero()) {
+    throw Error('division by zero');
+  } else if (this.isZero()) {
+    return Long.ZERO;
+  }
+
+  if (this.equals(Long.MIN_VALUE)) {
+    if (other.equals(Long.ONE) ||
+        other.equals(Long.NEG_ONE)) {
+      return Long.MIN_VALUE;
+    } else if (other.equals(Long.MIN_VALUE)) {
+      return Long.ONE;
+    } else {
+      var halfThis = this.shiftRight(1);
+      var approx = halfThis.div(other).shiftLeft(1);
+      if (approx.equals(Long.ZERO)) {
+        return other.isNegative() ? Long.ONE : Long.NEG_ONE;
+      } else {
+        var rem = this.subtract(other.multiply(approx));
+        var result = approx.add(rem.div(other));
+        return result;
+      }
+    }
+  } else if (other.equals(Long.MIN_VALUE)) {
+    return Long.ZERO;
+  }
+
+  if (this.isNegative()) {
+    if (other.isNegative()) {
+      return this.negate().div(other.negate());
+    } else {
+      return this.negate().div(other).negate();
+    }
+  } else if (other.isNegative()) {
+    return this.div(other.negate()).negate();
+  }
+
+  var res = Long.ZERO;
+  var rem = this;
+  while (rem.greaterThanOrEqual(other)) {
+    var approx = Math.max(1, Math.floor(rem.toNumber() / other.toNumber()));
+
+    var log2 = Math.ceil(Math.log(approx) / Math.LN2);
+    var delta = (log2 <= 48) ? 1 : Math.pow(2, log2 - 48);
+
+    var approxRes = Long.fromNumber(approx);
+    var approxRem = approxRes.multiply(other);
+    while (approxRem.isNegative() || approxRem.greaterThan(rem)) {
+      approx -= delta;
+      approxRes = Long.fromNumber(approx);
+      approxRem = approxRes.multiply(other);
+    }
+
+    if (approxRes.isZero()) {
+      approxRes = Long.ONE;
+    }
+
+    res = res.add(approxRes);
+    rem = rem.subtract(approxRem);
+  }
+  return res;
+};
+
+Long.prototype.modulo = function(other) {
+  return this.subtract(this.div(other).multiply(other));
+};
+
+Long.prototype.not = function() {
+  return Long.fromBits(~this.low_, ~this.high_);
+};
+
+Long.prototype.and = function(other) {
+  return Long.fromBits(this.low_ & other.low_,
+                                 this.high_ & other.high_);
+};
+
+Long.prototype.or = function(other) {
+  return Long.fromBits(this.low_ | other.low_,
+                                 this.high_ | other.high_);
+};
+
+Long.prototype.xor = function(other) {
+  return Long.fromBits(this.low_ ^ other.low_,
+                                 this.high_ ^ other.high_);
+};
+
+Long.prototype.shiftLeft = function(numBits) {
+  numBits &= 63;
+  if (numBits == 0) {
+    return this;
+  } else {
+    var low = this.low_;
+    if (numBits < 32) {
+      var high = this.high_;
+      return Long.fromBits(
+          low << numBits,
+          (high << numBits) | (low >>> (32 - numBits)));
+    } else {
+      return Long.fromBits(0, low << (numBits - 32));
+    }
+  }
+};
+
+Long.prototype.shiftRight = function(numBits) {
+  numBits &= 63;
+  if (numBits == 0) {
+    return this;
+  } else {
+    var high = this.high_;
+    if (numBits < 32) {
+      var low = this.low_;
+      return Long.fromBits(
+          (low >>> numBits) | (high << (32 - numBits)),
+          high >> numBits);
+    } else {
+      return Long.fromBits(
+          high >> (numBits - 32),
+          high >= 0 ? 0 : -1);
+    }
+  }
+};
+
+Long.prototype.shiftRightUnsigned = function(numBits) {
+  numBits &= 63;
+  if (numBits == 0) {
+    return this;
+  } else {
+    var high = this.high_;
+    if (numBits < 32) {
+      var low = this.low_;
+      return Long.fromBits(
+          (low >>> numBits) | (high << (32 - numBits)),
+          high >>> numBits);
+    } else if (numBits == 32) {
+      return Long.fromBits(high, 0);
+    } else {
+      return Long.fromBits(high >>> (numBits - 32), 0);
+    }
+  }
+};
+
+
+
+// Int64
+function hs_eqInt64(x, y) {return x.equals(y);}
+function hs_neInt64(x, y) {return !x.equals(y);}
+function hs_ltInt64(x, y) {return x.compare(y) < 0;}
+function hs_leInt64(x, y) {return x.compare(y) <= 0;}
+function hs_gtInt64(x, y) {return x.compare(y) > 0;}
+function hs_geInt64(x, y) {return x.compare(y) >= 0;}
+function hs_quotInt64(x, y) {return x.div(y);}
+function hs_remInt64(x, y) {return x.modulo(y);}
+function hs_plusInt64(x, y) {return x.add(y);}
+function hs_minusInt64(x, y) {return x.subtract(y);}
+function hs_timesInt64(x, y) {return x.multiply(y);}
+function hs_negateInt64(x) {return x.negate();}
+function hs_uncheckedIShiftL64(x, bits) {x.shiftLeft(bits);}
+function hs_uncheckedIShiftRA64(x, bits) {x.shiftRight(bits);}
+function hs_uncheckedIShiftRL64(x, bits) {x.shiftRightUnsigned(bits);}
+function hs_intToInt64(x) {return new Long(x, 0);}
+function hs_int64ToInt(x) {return x.toInt();}
+
+
+
+// Word64
+function hs_wordToWord64(x) {
+    return I_fromInt(x);
+}
+function hs_word64ToWord(x) {
+    return I_toInt(x);
+}
+function hs_mkWord64(low, high) {
+    return I_fromBits([low, high]);
+}
+
+var hs_and64 = I_and;
+var hs_or64 = I_or;
+var hs_xor64 = I_xor;
+var __i64_all_ones = I_fromBits([0xffffffff, 0xffffffff]);
+function hs_not64(x) {
+    return I_xor(x, __i64_all_ones);
+}
+var hs_eqWord64 = I_equals;
+var hs_neWord64 = I_notEquals;
+var hs_ltWord64 = I_lessThan;
+var hs_leWord64 = I_lessThanOrEqual;
+var hs_gtWord64 = I_greaterThan;
+var hs_geWord64 = I_greaterThanOrEqual;
+var hs_quotWord64 = I_quot;
+var hs_remWord64 = I_rem;
+var __w64_max = I_fromBits([0,0,1]);
+function hs_uncheckedShiftL64(x, bits) {
+    return I_rem(I_shiftLeft(x, bits), __w64_max);
+}
+var hs_uncheckedShiftRL64 = I_shiftRight;
+function hs_int64ToWord64(x) {
+    var tmp = I_add(__w64_max, I_fromBits([x.getLowBits(), x.getHighBits()]));
+    return I_rem(tmp, __w64_max);
+}
+function hs_word64ToInt64(x) {
+    return Long.fromBits(I_getBits(x, 0), I_getBits(x, 1));
+}
+
+// Joseph Myers' MD5 implementation; used under the BSD license.
+
+function md5cycle(x, k) {
+var a = x[0], b = x[1], c = x[2], d = x[3];
+
+a = ff(a, b, c, d, k[0], 7, -680876936);
+d = ff(d, a, b, c, k[1], 12, -389564586);
+c = ff(c, d, a, b, k[2], 17,  606105819);
+b = ff(b, c, d, a, k[3], 22, -1044525330);
+a = ff(a, b, c, d, k[4], 7, -176418897);
+d = ff(d, a, b, c, k[5], 12,  1200080426);
+c = ff(c, d, a, b, k[6], 17, -1473231341);
+b = ff(b, c, d, a, k[7], 22, -45705983);
+a = ff(a, b, c, d, k[8], 7,  1770035416);
+d = ff(d, a, b, c, k[9], 12, -1958414417);
+c = ff(c, d, a, b, k[10], 17, -42063);
+b = ff(b, c, d, a, k[11], 22, -1990404162);
+a = ff(a, b, c, d, k[12], 7,  1804603682);
+d = ff(d, a, b, c, k[13], 12, -40341101);
+c = ff(c, d, a, b, k[14], 17, -1502002290);
+b = ff(b, c, d, a, k[15], 22,  1236535329);
+
+a = gg(a, b, c, d, k[1], 5, -165796510);
+d = gg(d, a, b, c, k[6], 9, -1069501632);
+c = gg(c, d, a, b, k[11], 14,  643717713);
+b = gg(b, c, d, a, k[0], 20, -373897302);
+a = gg(a, b, c, d, k[5], 5, -701558691);
+d = gg(d, a, b, c, k[10], 9,  38016083);
+c = gg(c, d, a, b, k[15], 14, -660478335);
+b = gg(b, c, d, a, k[4], 20, -405537848);
+a = gg(a, b, c, d, k[9], 5,  568446438);
+d = gg(d, a, b, c, k[14], 9, -1019803690);
+c = gg(c, d, a, b, k[3], 14, -187363961);
+b = gg(b, c, d, a, k[8], 20,  1163531501);
+a = gg(a, b, c, d, k[13], 5, -1444681467);
+d = gg(d, a, b, c, k[2], 9, -51403784);
+c = gg(c, d, a, b, k[7], 14,  1735328473);
+b = gg(b, c, d, a, k[12], 20, -1926607734);
+
+a = hh(a, b, c, d, k[5], 4, -378558);
+d = hh(d, a, b, c, k[8], 11, -2022574463);
+c = hh(c, d, a, b, k[11], 16,  1839030562);
+b = hh(b, c, d, a, k[14], 23, -35309556);
+a = hh(a, b, c, d, k[1], 4, -1530992060);
+d = hh(d, a, b, c, k[4], 11,  1272893353);
+c = hh(c, d, a, b, k[7], 16, -155497632);
+b = hh(b, c, d, a, k[10], 23, -1094730640);
+a = hh(a, b, c, d, k[13], 4,  681279174);
+d = hh(d, a, b, c, k[0], 11, -358537222);
+c = hh(c, d, a, b, k[3], 16, -722521979);
+b = hh(b, c, d, a, k[6], 23,  76029189);
+a = hh(a, b, c, d, k[9], 4, -640364487);
+d = hh(d, a, b, c, k[12], 11, -421815835);
+c = hh(c, d, a, b, k[15], 16,  530742520);
+b = hh(b, c, d, a, k[2], 23, -995338651);
+
+a = ii(a, b, c, d, k[0], 6, -198630844);
+d = ii(d, a, b, c, k[7], 10,  1126891415);
+c = ii(c, d, a, b, k[14], 15, -1416354905);
+b = ii(b, c, d, a, k[5], 21, -57434055);
+a = ii(a, b, c, d, k[12], 6,  1700485571);
+d = ii(d, a, b, c, k[3], 10, -1894986606);
+c = ii(c, d, a, b, k[10], 15, -1051523);
+b = ii(b, c, d, a, k[1], 21, -2054922799);
+a = ii(a, b, c, d, k[8], 6,  1873313359);
+d = ii(d, a, b, c, k[15], 10, -30611744);
+c = ii(c, d, a, b, k[6], 15, -1560198380);
+b = ii(b, c, d, a, k[13], 21,  1309151649);
+a = ii(a, b, c, d, k[4], 6, -145523070);
+d = ii(d, a, b, c, k[11], 10, -1120210379);
+c = ii(c, d, a, b, k[2], 15,  718787259);
+b = ii(b, c, d, a, k[9], 21, -343485551);
+
+x[0] = add32(a, x[0]);
+x[1] = add32(b, x[1]);
+x[2] = add32(c, x[2]);
+x[3] = add32(d, x[3]);
+
+}
+
+function cmn(q, a, b, x, s, t) {
+a = add32(add32(a, q), add32(x, t));
+return add32((a << s) | (a >>> (32 - s)), b);
+}
+
+function ff(a, b, c, d, x, s, t) {
+return cmn((b & c) | ((~b) & d), a, b, x, s, t);
+}
+
+function gg(a, b, c, d, x, s, t) {
+return cmn((b & d) | (c & (~d)), a, b, x, s, t);
+}
+
+function hh(a, b, c, d, x, s, t) {
+return cmn(b ^ c ^ d, a, b, x, s, t);
+}
+
+function ii(a, b, c, d, x, s, t) {
+return cmn(c ^ (b | (~d)), a, b, x, s, t);
+}
+
+function md51(s) {
+var n = s.length,
+state = [1732584193, -271733879, -1732584194, 271733878], i;
+for (i=64; i<=s.length; i+=64) {
+md5cycle(state, md5blk(s.substring(i-64, i)));
+}
+s = s.substring(i-64);
+var tail = [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0];
+for (i=0; i<s.length; i++)
+tail[i>>2] |= s.charCodeAt(i) << ((i%4) << 3);
+tail[i>>2] |= 0x80 << ((i%4) << 3);
+if (i > 55) {
+md5cycle(state, tail);
+for (i=0; i<16; i++) tail[i] = 0;
+}
+tail[14] = n*8;
+md5cycle(state, tail);
+return state;
+}
+
+function md5blk(s) {
+var md5blks = [], i;
+for (i=0; i<64; i+=4) {
+md5blks[i>>2] = s.charCodeAt(i)
++ (s.charCodeAt(i+1) << 8)
++ (s.charCodeAt(i+2) << 16)
++ (s.charCodeAt(i+3) << 24);
+}
+return md5blks;
+}
+
+var hex_chr = '0123456789abcdef'.split('');
+
+function rhex(n)
+{
+var s='', j=0;
+for(; j<4; j++)
+s += hex_chr[(n >> (j * 8 + 4)) & 0x0F]
++ hex_chr[(n >> (j * 8)) & 0x0F];
+return s;
+}
+
+function hex(x) {
+for (var i=0; i<x.length; i++)
+x[i] = rhex(x[i]);
+return x.join('');
+}
+
+function md5(s) {
+return hex(md51(s));
+}
+
+function add32(a, b) {
+return (a + b) & 0xFFFFFFFF;
+}
+
+// Functions for dealing with arrays.
+
+function newArr(n, x) {
+    var arr = [];
+    for(; n >= 0; --n) {
+        arr.push(x);
+    }
+    return arr;
+}
+
+// Create all views at once; perhaps it's wasteful, but it's better than having
+// to check for the right view at each read or write.
+function newByteArr(n) {
+    // Pad the thing to multiples of 8.
+    var padding = 8 - n % 8;
+    if(padding < 8) {
+        n += padding;
+    }
+    var arr = {};
+    var buffer = new ArrayBuffer(n);
+    var views = {};
+    views['i8']  = new Int8Array(buffer);
+    views['i16'] = new Int16Array(buffer);
+    views['i32'] = new Int32Array(buffer);
+    views['w8']  = new Uint8Array(buffer);
+    views['w16'] = new Uint16Array(buffer);
+    views['w32'] = new Uint32Array(buffer);
+    views['f32'] = new Float32Array(buffer);
+    views['f64'] = new Float64Array(buffer);
+    arr['b'] = buffer;
+    arr['v'] = views;
+    // ByteArray and Addr are the same thing, so keep an offset if we get
+    // casted.
+    arr['off'] = 0;
+    return arr;
+}
+
+// An attempt at emulating pointers enough for ByteString and Text to be
+// usable without patching the hell out of them.
+// The general idea is that Addr# is a byte array with an associated offset.
+
+function plusAddr(addr, off) {
+    var newaddr = {};
+    newaddr['off'] = addr['off'] + off;
+    newaddr['b']   = addr['b'];
+    newaddr['v']   = addr['v'];
+    return newaddr;
+}
+
+function writeOffAddr(type, elemsize, addr, off, x) {
+    addr['v'][type][addr.off/elemsize + off] = x;
+}
+
+function readOffAddr(type, elemsize, addr, off) {
+    return addr['v'][type][addr.off/elemsize + off];
+}
+
+// Two addresses are equal if they point to the same buffer and have the same
+// offset. For other comparisons, just use the offsets - nobody in their right
+// mind would check if one pointer is less than another, completely unrelated,
+// pointer and then act on that information anyway.
+function addrEq(a, b) {
+    if(a == b) {
+        return true;
+    }
+    return a && b && a['b'] == b['b'] && a['off'] == b['off'];
+}
+
+function addrLT(a, b) {
+    if(a) {
+        return b && a['off'] < b['off'];
+    } else {
+        return (b != 0); 
+    }
+}
+
+function addrGT(a, b) {
+    if(b) {
+        return a && a['off'] > b['off'];
+    } else {
+        return (a != 0);
+    }
+}
+
+function withChar(f, charCode) {
+    return f(String.fromCharCode(charCode)).charCodeAt(0);
+}
+
+function u_towlower(charCode) {
+    return withChar(function(c) {return c.toLowerCase()}, charCode);
+}
+
+function u_towupper(charCode) {
+    return withChar(function(c) {return c.toUpperCase()}, charCode);
+}
+
+var u_towtitle = u_towupper;
+
+function u_iswupper(charCode) {
+    var c = String.fromCharCode(charCode);
+    return c == c.toUpperCase() && c != c.toLowerCase();
+}
+
+function u_iswlower(charCode) {
+    var c = String.fromCharCode(charCode);
+    return  c == c.toLowerCase() && c != c.toUpperCase();
+}
+
+function u_iswdigit(charCode) {
+    return charCode >= 48 && charCode <= 57;
+}
+
+function u_iswcntrl(charCode) {
+    return charCode <= 0x1f || charCode == 0x7f;
+}
+
+function u_iswspace(charCode) {
+    var c = String.fromCharCode(charCode);
+    return c.replace(/\s/g,'') != c;
+}
+
+function u_iswalpha(charCode) {
+    var c = String.fromCharCode(charCode);
+    return c.replace(__hs_alphare, '') != c;
+}
+
+function u_iswalnum(charCode) {
+    return u_iswdigit(charCode) || u_iswalpha(charCode);
+}
+
+function u_iswprint(charCode) {
+    return !u_iswcntrl(charCode);
+}
+
+function u_gencat(c) {
+    throw 'u_gencat is only supported with --full-unicode.';
+}
+
+// Regex that matches any alphabetic character in any language. Horrible thing.
+var __hs_alphare = /[\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/g;
+
+// 2D Canvas drawing primitives.
+function jsHasCtx2D(elem) {return !!elem.getContext;}
+function jsGetCtx2D(elem) {return elem.getContext('2d');}
+function jsBeginPath(ctx) {ctx.beginPath();}
+function jsMoveTo(ctx, x, y) {ctx.moveTo(x, y);}
+function jsLineTo(ctx, x, y) {ctx.lineTo(x, y);}
+function jsStroke(ctx) {ctx.stroke();}
+function jsFill(ctx) {ctx.fill();}
+function jsRotate(ctx, radians) {ctx.rotate(radians);}
+function jsTranslate(ctx, x, y) {ctx.translate(x, y);}
+function jsScale(ctx, x, y) {ctx.scale(x, y);}
+function jsPushState(ctx) {ctx.save();}
+function jsPopState(ctx) {ctx.restore();}
+function jsResetCanvas(el) {el.width = el.width;}
+function jsDrawImage(ctx, img, x, y) {ctx.drawImage(img, x, y);}
+function jsDrawImageClipped(ctx, img, x, y, cx, cy, cw, ch) {
+    ctx.drawImage(img, cx, cy, cw, ch, x, y, cw, ch);
+}
+function jsDrawText(ctx, str, x, y) {ctx.fillText(str, x, y);}
+function jsClip(ctx) {ctx.clip();}
+function jsArc(ctx, x, y, radius, fromAngle, toAngle) {
+    ctx.arc(x, y, radius, fromAngle, toAngle);
+}
+function jsCanvasToDataURL(el) {return el.toDataURL('image/png');}
+
+// Simulate handles.
+// When implementing new handles, remember that passed strings may be thunks,
+// and so need to be evaluated before use.
+
+function jsNewHandle(init, read, write, flush, close, seek, tell) {
+    var h = {
+        read: read || function() {},
+        write: write || function() {},
+        seek: seek || function() {},
+        tell: tell || function() {},
+        close: close || function() {},
+        flush: flush || function() {}
+    };
+    init.call(h);
+    return h;
+}
+
+function jsReadHandle(h, len) {return h.read(len);}
+function jsWriteHandle(h, str) {return h.write(str);}
+function jsFlushHandle(h) {return h.flush();}
+function jsCloseHandle(h) {return h.close();}
+
+function jsMkConWriter(op) {
+    return function(str) {
+        str = E(str);
+        var lines = (this.buf + str).split('\n');
+        for(var i = 0; i < lines.length-1; ++i) {
+            op.call(console, lines[i]);
+        }
+        this.buf = lines[lines.length-1];
+    }
+}
+
+function jsMkStdout() {
+    return jsNewHandle(
+        function() {this.buf = '';},
+        function(_) {return '';},
+        jsMkConWriter(console.log),
+        function() {console.log(this.buf); this.buf = '';}
+    );
+}
+
+function jsMkStderr() {
+    return jsNewHandle(
+        function() {this.buf = '';},
+        function(_) {return '';},
+        jsMkConWriter(console.warn),
+        function() {console.warn(this.buf); this.buf = '';}
+    );
+}
+
+function jsMkStdin() {
+    return jsNewHandle(
+        function() {this.buf = '';},
+        function(len) {
+            while(this.buf.length < len) {
+                this.buf += prompt('[stdin]') + '\n';
+            }
+            var ret = this.buf.substr(0, len);
+            this.buf = this.buf.substr(len);
+            return ret;
+        }
+    );
+}
+
+var _0=false,_1=new T(function(){return [0,"(function(e){return e.parentNode;})"];}),_2=function(_3){var _4=A(_3,[_]);return E(_4);},_5=function(_6){return _2(function(_){var _=0;return eval(E(_6)[1]);});},_7=new T(function(){return _5(_1);}),_8=[0,0],_9=[0],_a=function(_b,_){return _9;},_c=function(_){return _9;},_d=[0,_c,_a],_e=2,_f=[1],_g=[0],_h=[0,_g,_8,_e,_d,_0,_f],_i=function(_){var _=0,_j=newMVar(),_=putMVar(_j,_h);return [0,_j];},_k=new T(function(){return _2(_i);}),_l=function(_m,_n,_){var _o=E(_k)[1],_p=takeMVar(_o),_q=A(_m,[_p,_]),_r=E(_q),_s=E(_r[1]),_t=_s[1],_u=_s[2],_=putMVar(_o,new T(function(){var _v=E(_r[2]);return [0,_v[1],_v[2],_v[3],_v[4],_0,_v[6]];}));if(!E(E(_p)[5])){var _w=A(_t,[_n,_]);return _u;}else{var _x=A(_7,[E(E(_n)[1]),_]),_y=A(_t,[[0,_x],_]);return _u;}},_z=function(_A,_B,_){var _C=jsCreateTextNode(toJSStr(E(_A))),_D=jsAppendChild(_C,E(_B)[1]);return [0,_C];},_E=[0,34],_F=unCStr("br"),_G=function(_H,_){var _I=jsCreateElem(toJSStr(E(_F))),_J=jsAppendChild(_I,E(_H)[1]);return [0,_I];},_K=[1,_E,_g],_L=unCStr("hello, what is your name?"),_M=unCStr("div"),_N=function(_O,_P){var _Q=new T(function(){return A(_O,[_P]);});return function(_R,_){var _S=jsCreateElem(toJSStr(E(_M))),_T=jsAppendChild(_S,E(_R)[1]),_U=[0,_S],_V=A(_Q,[_U,_]);return _U;};},_W=new T(function(){return [0,"(function(){return document.body;})"];}),_X=unCStr("id"),_Y=unCStr("console"),_Z=function(_10,_){return _10;},_11=function(_12){return E(_12);},_13=function(_){var _14=E(_Y),_15=jsFind(toJSStr(_14)),_16=E(_15);if(!_16[0]){var _17=A(_5,[_W,_]),_18=A(_N,[_11,_Z,[0,_17],_]),_19=E(_18),_1a=jsSetAttr(_19[1],toJSStr(E(_X)),toJSStr(_14));return _19;}else{return _16[1];}},_1b=function(_1c,_1d,_){return [0,[0,_Z,[1,_1c]],_1d];},_1e=unCStr("id"),_1f=0,_1g=function(_1h,_1i,_1j,_1k){return A(_1h,[new T(function(){return function(_){var _1l=jsSetAttr(E(_1i)[1],toJSStr(E(_1j)),toJSStr(E(_1k)));return _1f;};})]);},_1m=function(_1n){return E(_1n);},_1o=function(_1p,_1q,_1r,_){var _1s=E(_1q),_1t=A(_1p,[_1r,_]),_1u=A(_1g,[_1m,_1t,_1s[1],_1s[2],_]);return _1t;},_1v=function(_1w,_1x){while(1){var _1y=(function(_1z,_1A){var _1B=E(_1A);if(!_1B[0]){return E(_1z);}else{_1w=function(_1C,_){return _1o(_1z,_1B[1],_1C,_);};_1x=_1B[2];return null;}})(_1w,_1x);if(_1y!=null){return _1y;}}},_1D=function(_1E,_1F,_){return [0,_1f,_1E];},_1G=function(_1H,_){return [0,_1H,_1H];},_1I=[0,coercionToken],_1J=function(_1K,_1L,_){var _1M=A(_1K,[_]);return A(_1L,[_]);},_1N=function(_1O,_1P,_){return _1J(_1O,_1P,_);},_1Q=function(_1R,_1S,_){var _1T=A(_1R,[_]);return A(_1S,[_1T,_]);},_1U=unCStr("base"),_1V=unCStr("GHC.IO.Exception"),_1W=unCStr("IOException"),_1X=[0,I_fromBits([4053623282,1685460941]),I_fromBits([3693590983,2507416641]),_1U,_1V,_1W],_1Y=[0,I_fromBits([4053623282,1685460941]),I_fromBits([3693590983,2507416641]),_1X,_g],_1Z=function(_20){return E(_1Y);},_21=function(_22){return E(E(_22)[1]);},_23=unCStr("Maybe.fromJust: Nothing"),_24=new T(function(){return err(_23);}),_25=function(_26,_27,_28){var _29=new T(function(){var _2a=A(_26,[_28]),_2b=A(_27,[new T(function(){var _2c=E(_29);return _2c[0]==0?E(_24):E(_2c[1]);})]),_2d=hs_eqWord64(_2a[1],_2b[1]);if(!E(_2d)){return [0];}else{var _2e=hs_eqWord64(_2a[2],_2b[2]);return E(_2e)==0?[0]:[1,_28];}});return E(_29);},_2f=function(_2g){var _2h=E(_2g);return _25(_21(_2h[1]),_1Z,_2h[2]);},_2i=unCStr(": "),_2j=[0,41],_2k=unCStr(" ("),_2l=function(_2m,_2n){var _2o=E(_2m);return _2o[0]==0?E(_2n):[1,_2o[1],new T(function(){return _2l(_2o[2],_2n);})];},_2p=unCStr("already exists"),_2q=unCStr("does not exist"),_2r=unCStr("protocol error"),_2s=unCStr("failed"),_2t=unCStr("invalid argument"),_2u=unCStr("inappropriate type"),_2v=unCStr("hardware fault"),_2w=unCStr("unsupported operation"),_2x=unCStr("timeout"),_2y=unCStr("resource vanished"),_2z=unCStr("interrupted"),_2A=unCStr("resource busy"),_2B=unCStr("resource exhausted"),_2C=unCStr("end of file"),_2D=unCStr("illegal operation"),_2E=unCStr("permission denied"),_2F=unCStr("user error"),_2G=unCStr("unsatisified constraints"),_2H=unCStr("system error"),_2I=function(_2J,_2K){switch(E(_2J)){case 0:return _2l(_2p,_2K);case 1:return _2l(_2q,_2K);case 2:return _2l(_2A,_2K);case 3:return _2l(_2B,_2K);case 4:return _2l(_2C,_2K);case 5:return _2l(_2D,_2K);case 6:return _2l(_2E,_2K);case 7:return _2l(_2F,_2K);case 8:return _2l(_2G,_2K);case 9:return _2l(_2H,_2K);case 10:return _2l(_2r,_2K);case 11:return _2l(_2s,_2K);case 12:return _2l(_2t,_2K);case 13:return _2l(_2u,_2K);case 14:return _2l(_2v,_2K);case 15:return _2l(_2w,_2K);case 16:return _2l(_2x,_2K);case 17:return _2l(_2y,_2K);default:return _2l(_2z,_2K);}},_2L=[0,125],_2M=unCStr("{handle: "),_2N=function(_2O,_2P,_2Q,_2R,_2S,_2T){var _2U=new T(function(){var _2V=new T(function(){return _2I(_2P,new T(function(){var _2W=E(_2R);return _2W[0]==0?E(_2T):_2l(_2k,new T(function(){return _2l(_2W,[1,_2j,_2T]);}));}));}),_2X=E(_2Q);return _2X[0]==0?E(_2V):_2l(_2X,new T(function(){return _2l(_2i,_2V);}));}),_2Y=E(_2S);if(!_2Y[0]){var _2Z=E(_2O);if(!_2Z[0]){return E(_2U);}else{var _30=E(_2Z[1]);return _30[0]==0?_2l(_2M,new T(function(){return _2l(_30[1],[1,_2L,new T(function(){return _2l(_2i,_2U);})]);})):_2l(_2M,new T(function(){return _2l(_30[1],[1,_2L,new T(function(){return _2l(_2i,_2U);})]);}));}}else{return _2l(_2Y[1],new T(function(){return _2l(_2i,_2U);}));}},_31=function(_32){var _33=E(_32);return _2N(_33[1],_33[2],_33[3],_33[4],_33[6],_g);},_34=function(_35,_36){var _37=E(_35);return _2N(_37[1],_37[2],_37[3],_37[4],_37[6],_36);},_38=[0,44],_39=[0,93],_3a=[0,91],_3b=function(_3c,_3d,_3e){var _3f=E(_3d);return _3f[0]==0?unAppCStr("[]",_3e):[1,_3a,new T(function(){return A(_3c,[_3f[1],new T(function(){var _3g=function(_3h){var _3i=E(_3h);return _3i[0]==0?E([1,_39,_3e]):[1,_38,new T(function(){return A(_3c,[_3i[1],new T(function(){return _3g(_3i[2]);})]);})];};return _3g(_3f[2]);})]);})];},_3j=function(_3k,_3l){return _3b(_34,_3k,_3l);},_3m=function(_3n,_3o,_3p){var _3q=E(_3o);return _2N(_3q[1],_3q[2],_3q[3],_3q[4],_3q[6],_3p);},_3r=[0,_3m,_31,_3j],_3s=new T(function(){return [0,_1Z,_3r,_3t,_2f];}),_3t=function(_3u){return [0,_3s,_3u];},_3v=7,_3w=function(_3x){return [0,_9,_3v,_g,_3x,_9,_9];},_3y=function(_3z,_){return die(new T(function(){return _3t(new T(function(){return _3w(_3z);}));}));},_3A=function(_3B,_){return _3y(_3B,_);},_3C=[0,_1Q,_1N,_Z,_3A],_3D=function(_3E){return E(E(_3E)[1]);},_3F=function(_3G,_3H,_3I,_3J){return A(_3D,[_3G,new T(function(){return A(_3H,[_3J]);}),function(_3K){return A(_3I,[new T(function(){return E(E(_3K)[1]);}),new T(function(){return E(E(_3K)[2]);})]);}]);},_3L=function(_3M,_3N,_3O,_3P){return A(_3D,[_3M,new T(function(){return A(_3N,[_3P]);}),function(_3Q){return A(_3O,[new T(function(){return E(E(_3Q)[2]);})]);}]);},_3R=function(_3S,_3T,_3U,_3V){return _3L(_3S,_3T,_3U,_3V);},_3W=function(_3X){return E(E(_3X)[4]);},_3Y=function(_3Z,_40){var _41=new T(function(){return A(_3W,[_3Z,_40]);});return function(_42){return E(_41);};},_43=function(_44){return E(E(_44)[3]);},_45=function(_46){var _47=new T(function(){return _43(_46);});return [0,function(_3T,_3U,_3V){return _3F(_46,_3T,_3U,_3V);},function(_3T,_3U,_3V){return _3R(_46,_3T,_3U,_3V);},function(_48,_49){return A(_47,[[0,_48,_49]]);},function(_3V){return _3Y(_46,_3V);}];},_4a=new T(function(){return _45(_3C);}),_4b=[0,112],_4c=function(_4d,_4e){var _4f=jsShowI(_4d);return _2l(fromJSStr(_4f),_4e);},_4g=[0,41],_4h=[0,40],_4i=function(_4j,_4k,_4l){return _4k>=0?_4c(_4k,_4l):_4j<=6?_4c(_4k,_4l):[1,_4h,new T(function(){var _4m=jsShowI(_4k);return _2l(fromJSStr(_4m),[1,_4g,_4l]);})];},_4n=function(_4o,_4p,_4q,_4r){var _4s=E(_4p);return A(_4s[1],[new T(function(){var _4t=E(_4o);return E(_4q);}),function(_4u){var _4v=new T(function(){return E(E(_4u)[2]);});return A(_4s[2],[new T(function(){return A(_4r,[new T(function(){var _4w=E(new T(function(){var _4x=E(_4o);return [0,coercionToken];})),_4y=E(_4u);return [0,_4y[1],new T(function(){return [0,E(_4v)[1]+1|0];}),_4y[3],_4y[4],_4y[5],_4y[6]];})]);}),new T(function(){return A(_4s[3],[[1,_4b,new T(function(){return _2l(_4i(0,E(_4v)[1],_g),new T(function(){return E(E(_4u)[1]);}));})]]);})]);}]);},_4z=new T(function(){return _4n(_1I,_4a,_1G,_1D);}),_4A=unCStr("span"),_4B=function(_4C,_4D,_){var _4E=jsCreateElem(toJSStr(E(_4C))),_4F=jsAppendChild(_4E,E(_4D)[1]);return [0,_4E];},_4G=function(_1C,_){return _4B(_4A,_1C,_);},_4H=unCStr(" could be found!"),_4I=function(_4J){return err(unAppCStr("No element with ID ",new T(function(){return _2l(_4J,_4H);})));},_4K=function(_4L,_4M,_){var _4N=E(_4M),_4O=jsFind(toJSStr(_4N)),_4P=E(_4O);if(!_4P[0]){return _4I(_4N);}else{var _4Q=E(_4P[1]),_4R=jsClearChildren(_4Q[1]);return _l(_4L,_4Q,_);}},_4S=function(_4T,_4U,_4V,_){var _4W=A(_4z,[_4V,_]),_4X=E(_4W),_4Y=_4X[1],_4Z=E(_4X[2]),_50=_4Z[2],_51=E(_4Z[4]),_52=A(_4T,[[0,_4Z[1],_50,_4Z[3],[0,function(_){return _4K(function(_53,_){var _54=A(_4T,[new T(function(){var _55=E(_53);return [0,_55[1],_50,_55[3],_55[4],_55[5],_55[6]];}),_]);return [0,[0,_Z,E(E(_54)[1])[2]],_53];},_4Y,_);},function(_56,_){var _57=_4K(new T(function(){return A(_4U,[_56]);}),_4Y,_),_58=E(_57);return _58[0]==0?_9:A(_51[2],[_58[1],_]);}],_4Z[5],_4Z[6]],_]),_59=E(_52),_5a=_59[2],_5b=E(_59[1]),_5c=_5b[1],_5d=new T(function(){return _1v(_4G,[1,[0,_1e,_4Y],_g]);}),_5e=E(_5b[2]);if(!_5e[0]){return [0,[0,function(_5f,_){var _5g=A(_5c,[_5f,_]),_5h=A(_5d,[_5f,_]);return _5f;},_9],new T(function(){var _5i=E(_5a);return [0,_5i[1],_5i[2],_5i[3],_51,_5i[5],_5i[6]];})];}else{var _5j=A(_4U,[_5e[1],new T(function(){var _5k=E(_5a);return [0,_5k[1],_5k[2],_5k[3],_51,_5k[5],_5k[6]];}),_]),_5l=E(_5j),_5m=E(_5l[1]);return [0,[0,function(_5n,_){var _5o=A(_5c,[_5n,_]),_5p=A(_5d,[_5n,_]),_5q=A(_5m[1],[_5p,_]);return _5n;},_5m[2]],_5l[2]];}},_5r=unCStr("Pattern match failure in do expression at Haste\\HPlay\\Console.hs:56:4-11"),_5s=[2,coercionToken],_5t=function(_5u,_5v,_5w,_){var _5x=_4B(_5u,_5w,_),_5y=A(_5v,[_5x,_]);return _5x;},_5z=unCStr("()"),_5A=unCStr("GHC.Tuple"),_5B=unCStr("ghc-prim"),_5C=[0,I_fromBits([2170319554,3688774321]),I_fromBits([26914641,3196943984]),_5B,_5A,_5z],_5D=[0,I_fromBits([2170319554,3688774321]),I_fromBits([26914641,3196943984]),_5C,_g],_5E=function(_5F){return E(_5D);},_5G=unCStr("haste-perch-0.1.0.1"),_5H=unCStr("Haste.Perch"),_5I=unCStr("PerchM"),_5J=[0,I_fromBits([2701112155,1279447594]),I_fromBits([4004215588,1086752342]),_5G,_5H,_5I],_5K=[0,I_fromBits([2701112155,1279447594]),I_fromBits([4004215588,1086752342]),_5J,_g],_5L=function(_5M){return E(_5K);},_5N=function(_5O){var _5P=E(_5O);return _5P[0]==0?[0]:_2l(_5P[1],new T(function(){return _5N(_5P[2]);}));},_5Q=function(_5R,_5S){var _5T=E(_5R);if(!_5T){return [0,_g,_5S];}else{var _5U=E(_5S);if(!_5U[0]){return [0,_g,_g];}else{var _5V=new T(function(){var _5W=_5Q(_5T-1|0,_5U[2]);return [0,_5W[1],_5W[2]];});return [0,[1,_5U[1],new T(function(){return E(E(_5V)[1]);})],new T(function(){return E(E(_5V)[2]);})];}}},_5X=[0,120],_5Y=[0,48],_5Z=function(_60){var _61=new T(function(){var _62=_5Q(8,new T(function(){var _63=md5(toJSStr(E(_60)));return fromJSStr(_63);}));return [0,_62[1],_62[2]];}),_64=parseInt([0,toJSStr([1,_5Y,[1,_5X,new T(function(){return E(E(_61)[1]);})]])]),_65=new T(function(){var _66=_5Q(8,new T(function(){return E(E(_61)[2]);}));return [0,_66[1],_66[2]];}),_67=parseInt([0,toJSStr([1,_5Y,[1,_5X,new T(function(){return E(E(_65)[1]);})]])]),_68=hs_mkWord64(_64,_67),_69=parseInt([0,toJSStr([1,_5Y,[1,_5X,new T(function(){return E(_5Q(8,new T(function(){return E(E(_65)[2]);}))[1]);})]])]),_6a=hs_mkWord64(_69,_69);return [0,_68,_6a];},_6b=function(_6c,_6d){var _6e=E(_6d);return _6e[0]==0?[0]:[1,new T(function(){return A(_6c,[_6e[1]]);}),new T(function(){return _6b(_6c,_6e[2]);})];},_6f=function(_6g,_6h){var _6i=jsShowI(_6g),_6j=md5(_6i);return _2l(fromJSStr(_6j),new T(function(){var _6k=jsShowI(_6h),_6l=md5(_6k);return fromJSStr(_6l);}));},_6m=function(_6n){var _6o=E(_6n);return _6f(_6o[1],_6o[2]);},_6p=function(_6q){var _6r=E(_6q);if(!_6r[0]){return [0];}else{var _6s=E(_6r[1]);return [1,[0,_6s[1],_6s[2]],new T(function(){return _6p(_6r[2]);})];}},_6t=unCStr("Prelude.undefined"),_6u=new T(function(){return err(_6t);}),_6v=function(_6w,_6x){return function(_6y){return E(new T(function(){var _6z=A(_6w,[_6u]),_6A=E(_6z[3]),_6B=_6A[1],_6C=_6A[2],_6D=_2l(_6z[4],[1,new T(function(){return A(_6x,[_6u]);}),_g]);if(!_6D[0]){return [0,_6B,_6C,_6A,_g];}else{var _6E=_5Z(new T(function(){return _5N(_6b(_6m,[1,[0,_6B,_6C],new T(function(){return _6p(_6D);})]));}));return [0,_6E[1],_6E[2],_6A,_6D];}}));};},_6F=new T(function(){return _6v(_5L,_5E);}),_6G=unCStr("value"),_6H=unCStr("onclick"),_6I=unCStr("checked"),_6J=[0,_6I,_g],_6K=[1,_6J,_g],_6L=unCStr("type"),_6M=unCStr("input"),_6N=function(_6O,_){return _4B(_6M,_6O,_);},_6P=function(_6Q,_6R,_6S,_6T,_6U){var _6V=new T(function(){var _6W=new T(function(){return _1v(_6N,[1,[0,_6L,_6R],[1,[0,_1e,_6Q],[1,[0,_6G,_6S],_g]]]);});return !E(_6T)?E(_6W):_1v(_6W,_6K);}),_6X=E(_6U);return _6X[0]==0?E(_6V):_1v(_6V,[1,[0,_6H,_6X[1]],_g]);},_6Y=unCStr("href"),_6Z=[0,97],_70=[1,_6Z,_g],_71=function(_72,_){return _4B(_70,_72,_);},_73=function(_74,_75){var _76=new T(function(){return _1v(_71,[1,[0,_6Y,_74],_g]);});return function(_77,_){var _78=A(_76,[_77,_]),_79=A(_75,[_78,_]);return _78;};},_7a=function(_7b){return _73(_7b,function(_1C,_){return _z(_7b,_1C,_);});},_7c=unCStr("option"),_7d=function(_7e,_){return _4B(_7c,_7e,_);},_7f=unCStr("selected"),_7g=[0,_7f,_g],_7h=[1,_7g,_g],_7i=function(_7j,_7k,_7l){var _7m=new T(function(){return _1v(_7d,[1,[0,_6G,_7j],_g]);}),_7n=function(_7o,_){var _7p=A(_7m,[_7o,_]),_7q=A(_7k,[_7p,_]);return _7p;};return !E(_7l)?E(_7n):_1v(_7n,_7h);},_7r=function(_7s,_7t){return _7i(_7s,function(_1C,_){return _z(_7s,_1C,_);},_7t);},_7u=unCStr("method"),_7v=unCStr("action"),_7w=unCStr("UTF-8"),_7x=unCStr("acceptCharset"),_7y=[0,_7x,_7w],_7z=unCStr("form"),_7A=function(_7B,_){return _4B(_7z,_7B,_);},_7C=function(_7D,_7E,_7F){var _7G=new T(function(){return _1v(_7A,[1,_7y,[1,[0,_7v,_7D],[1,[0,_7u,_7E],_g]]]);});return function(_7H,_){var _7I=A(_7G,[_7H,_]),_7J=A(_7F,[_7I,_]);return _7I;};},_7K=unCStr("select"),_7L=function(_7M,_){return _4B(_7K,_7M,_);},_7N=function(_7O,_7P){var _7Q=new T(function(){return _1v(_7L,[1,[0,_1e,_7O],_g]);});return function(_7R,_){var _7S=A(_7Q,[_7R,_]),_7T=A(_7P,[_7S,_]);return _7S;};},_7U=unCStr("textarea"),_7V=function(_7W,_){return _4B(_7U,_7W,_);},_7X=function(_7Y,_7Z){var _80=new T(function(){return _1v(_7V,[1,[0,_1e,_7Y],_g]);});return function(_81,_){var _82=A(_80,[_81,_]),_83=_z(_7Z,_82,_);return _82;};},_84=unCStr("color:red"),_85=unCStr("style"),_86=[0,_85,_84],_87=[1,_86,_g],_88=[0,98],_89=[1,_88,_g],_8a=function(_8b){return _1v(function(_8c,_){var _8d=_4B(_89,_8c,_),_8e=A(_8b,[_8d,_]);return _8d;},_87);},_8f=function(_8g,_8h,_){var _8i=E(_8g);if(!_8i[0]){return _8h;}else{var _8j=A(_8i[1],[_8h,_]),_8k=_8f(_8i[2],_8h,_);return _8h;}},_8l=function(_8m,_8n,_8o,_){var _8p=A(_8m,[_8o,_]),_8q=A(_8n,[_8o,_]);return _8o;},_8r=[0,_Z,_8l,_8f],_8s=[0,_8r,_6F,_z,_z,_5t,_8a,_73,_7a,_6P,_7X,_7N,_7i,_7r,_7C,_1v],_8t=[0,_3C,_1m],_8u=function(_8v){return E(E(_8v)[1]);},_8w=function(_8x){return E(E(_8x)[1]);},_8y=function(_8z){return E(E(_8z)[2]);},_8A=function(_8B,_8C){var _8D=new T(function(){return A(_8y,[_8B,_8C]);}),_8E=new T(function(){return _8w(_8B);}),_8F=new T(function(){return _43(_8E);}),_8G=new T(function(){return _3D(_8E);});return function(_8H){return A(_8G,[_8D,function(_8I){return A(_8F,[[0,_8I,_8H]]);}]);};},_8J=function(_8K,_8L){return A(_8K,[function(_){return jsFind(toJSStr(E(_8L)));}]);},_8M=[0],_8N=function(_8O){return E(E(_8O)[3]);},_8P=new T(function(){return E(_6u);}),_8Q=new T(function(){return [0,"value"];}),_8R=function(_8S){return E(E(_8S)[6]);},_8T=unCStr("GHC.Types"),_8U=unCStr("[]"),_8V=[0,I_fromBits([4033920485,4128112366]),I_fromBits([786266835,2297333520]),_5B,_8T,_8U],_8W=[0,I_fromBits([4033920485,4128112366]),I_fromBits([786266835,2297333520]),_8V,_g],_8X=function(_8Y){return E(_8W);},_8Z=unCStr("Char"),_90=[0,I_fromBits([3763641161,3907222913]),I_fromBits([1343745632,586881778]),_5B,_8T,_8Z],_91=[0,I_fromBits([3763641161,3907222913]),I_fromBits([1343745632,586881778]),_90,_g],_92=function(_93){return E(_91);},_94=new T(function(){return _6v(_8X,_92);}),_95=new T(function(){return A(_94,[_6u]);}),_96=function(_97){return E(E(_97)[1]);},_98=[0,0],_99=[0,32],_9a=[0,10],_9b=function(_9c){var _9d=E(_9c);if(!_9d[0]){return E(_1m);}else{var _9e=_9d[1],_9f=E(_9d[2]);if(!_9f[0]){return _9g(_9a,_9e);}else{var _9h=new T(function(){return _9b(_9f);}),_9i=new T(function(){return _9g(_9a,_9e);});return function(_9j){return A(_9i,[[1,_99,new T(function(){return A(_9h,[_9j]);})]]);};}}},_9k=unCStr("->"),_9l=[1,_9k,_g],_9m=[1,_8T,_9l],_9n=[1,_5B,_9m],_9o=[0,32],_9p=function(_9q){var _9r=E(_9q);if(!_9r[0]){return [0];}else{var _9s=_9r[1],_9t=E(_9r[2]);return _9t[0]==0?E(_9s):_2l(_9s,[1,_9o,new T(function(){return _9p(_9t);})]);}},_9u=new T(function(){return _9p(_9n);}),_9v=new T(function(){var _9w=_5Z(_9u);return [0,_9w[1],_9w[2],_5B,_8T,_9k];}),_9x=function(_9y,_9z){var _9A=E(_9y);return _9A[0]==0?E(_9z):A(_9A[1],[new T(function(){return _9x(_9A[2],_9z);})]);},_9B=[0,I_fromBits([4033920485,4128112366]),I_fromBits([786266835,2297333520])],_9C=[1,_5D,_g],_9D=function(_9E){var _9F=E(_9E);if(!_9F[0]){return [0];}else{var _9G=E(_9F[1]);return [1,[0,_9G[1],_9G[2]],new T(function(){return _9D(_9F[2]);})];}},_9H=new T(function(){var _9I=_2l(_g,_9C);if(!_9I[0]){return E(_8V);}else{var _9J=_5Z(new T(function(){return _5N(_6b(_6m,[1,_9B,new T(function(){return _9D(_9I);})]));}));return E(_8V);}}),_9K=[0,40],_9L=function(_9M){return _9g(_9a,_9M);},_9N=[0,8],_9O=unCStr(" -> "),_9P=[0,9],_9Q=[0,93],_9R=[0,91],_9S=[0,41],_9T=[0,44],_9U=function(_9M){return [1,_9T,_9M];},_9V=function(_9W,_9X){var _9Y=E(_9X);return _9Y[0]==0?[0]:[1,_9W,[1,_9Y[1],new T(function(){return _9V(_9W,_9Y[2]);})]];},_9g=function(_9Z,_a0){var _a1=E(_a0),_a2=_a1[3],_a3=E(_a1[4]);if(!_a3[0]){return function(_a4){return _2l(E(_a2)[5],_a4);};}else{var _a5=_a3[1],_a6=new T(function(){var _a7=E(_a2)[5],_a8=new T(function(){return _9b(_a3);}),_a9=new T(function(){return E(_9Z)[1]<=9?function(_aa){return _2l(_a7,[1,_99,new T(function(){return A(_a8,[_aa]);})]);}:function(_ab){return [1,_4h,new T(function(){return _2l(_a7,[1,_99,new T(function(){return A(_a8,[[1,_4g,_ab]]);})]);})];};}),_ac=E(_a7);if(!_ac[0]){return E(_a9);}else{if(E(E(_ac[1])[1])==40){var _ad=E(_ac[2]);return _ad[0]==0?E(_a9):E(E(_ad[1])[1])==44?function(_ae){return [1,_9K,new T(function(){return A(new T(function(){var _af=_6b(_9L,_a3);if(!_af[0]){return E(_1m);}else{var _ag=new T(function(){return _9V(_9U,_af[2]);});return function(_ah){return _9x([1,_af[1],_ag],_ah);};}}),[[1,_9S,_ae]]);})];}:E(_a9);}else{return E(_a9);}}}),_ai=E(_a3[2]);if(!_ai[0]){var _aj=E(_a2),_ak=E(_9H),_al=hs_eqWord64(_aj[1],_ak[1]);if(!E(_al)){return E(_a6);}else{var _am=hs_eqWord64(_aj[2],_ak[2]);if(!E(_am)){return E(_a6);}else{var _an=new T(function(){return _9g(_98,_a5);});return function(_ao){return [1,_9R,new T(function(){return A(_an,[[1,_9Q,_ao]]);})];};}}}else{if(!E(_ai[2])[0]){var _ap=E(_a2),_aq=E(_9v),_ar=hs_eqWord64(_ap[1],_aq[1]);if(!E(_ar)){return E(_a6);}else{var _as=hs_eqWord64(_ap[2],_aq[2]);if(!E(_as)){return E(_a6);}else{var _at=new T(function(){return _9g(_9N,_ai[1]);}),_au=new T(function(){return _9g(_9P,_a5);});return E(_9Z)[1]<=8?function(_av){return A(_au,[new T(function(){return _2l(_9O,new T(function(){return A(_at,[_av]);}));})]);}:function(_aw){return [1,_4h,new T(function(){return A(_au,[new T(function(){return _2l(_9O,new T(function(){return A(_at,[[1,_4g,_aw]]);}));})]);})];};}}}else{return E(_a6);}}}},_ax=function(_ay,_az,_aA,_aB,_aC,_aD){var _aE=E(_ay),_aF=_aE[1],_aG=_aE[3],_aH=new T(function(){return A(_aG,[_8M]);}),_aI=new T(function(){return _8N(_aC);}),_aJ=new T(function(){return _8R(_aC);}),_aK=new T(function(){return unAppCStr("\" as type ",new T(function(){return A(_9g,[_98,A(_aA,[_8P]),_g]);}));}),_aL=new T(function(){return A(_96,[_aB,_8]);});return A(_aF,[new T(function(){return _8J(_az,_aD);}),function(_aM){var _aN=E(_aM);return _aN[0]==0?E(_aH):A(_aF,[new T(function(){return A(_az,[function(_){var _aO=jsGet(E(_aN[1])[1],E(_8Q)[1]);return [1,new T(function(){return fromJSStr(_aO);})];}]);}),function(_aP){var _aQ=E(_aP);if(!_aQ[0]){return E(_aH);}else{var _aR=_aQ[1];if(!E(new T(function(){var _aS=A(_aA,[_8P]),_aT=E(_95),_aU=hs_eqWord64(_aS[1],_aT[1]);if(!E(_aU)){return false;}else{var _aV=hs_eqWord64(_aS[2],_aT[2]);return E(_aV)==0?false:true;}}))){var _aW=new T(function(){return A(_aG,[[1,_aR,new T(function(){return A(_aJ,[new T(function(){return A(_aI,[new T(function(){return unAppCStr("can\'t read \"",new T(function(){return _2l(_aR,_aK);}));})]);})]);})]]);}),_aX=A(_aL,[_aR]);if(!_aX[0]){return E(_aW);}else{var _aY=E(_aX[1]);return E(_aY[2])[0]==0?E(_aX[2])[0]==0?A(_aG,[[2,_aY[1]]]):E(_aW):E(_aW);}}else{return A(_aG,[[2,_aR]]);}}}]);}]);},_aZ=1,_b0=function(_b1){return E(E(_b1)[9]);},_b2=function(_b3,_b4){return A(_43,[_b3,[0,_b4,_b4]]);},_b5=function(_b6){return E(E(_b6)[2]);},_b7=function(_b8,_b9,_ba){return A(_43,[_b8,[0,_1f,_b9]]);},_bb=function(_bc){return E(E(_bc)[2]);},_bd=function(_be,_bf,_bg,_bh,_bi){var _bj=new T(function(){return _8u(_be);}),_bk=new T(function(){return _b5(_bj);}),_bl=new T(function(){return _8w(_bf);}),_bm=new T(function(){return _45(_bl);}),_bn=new T(function(){return _4n([0,coercionToken],_bm,function(_bo){return _b2(_bl,_bo);},function(_bp,_bq){return _b7(_bl,_bp,_bq);});}),_br=new T(function(){return _43(_bl);}),_bs=new T(function(){return _3D(_bl);}),_bt=new T(function(){return _43(_bl);}),_bu=new T(function(){return _3D(_bl);}),_bv=new T(function(){return _43(_bl);}),_bw=new T(function(){return _3D(_bl);}),_bx=new T(function(){return _43(_bl);}),_by=new T(function(){return _3D(_bl);}),_bz=new T(function(){return _bb(_bh);}),_bA=new T(function(){return _b0(_be);});return function(_bB,_bC,_bD){return function(_bE){return A(_by,[new T(function(){var _bF=E(_bB);return _bF[0]==0?A(_bn,[_bE]):A(_bx,[[0,_bF[1],_bE]]);}),function(_bG){var _bH=new T(function(){return E(E(_bG)[1]);}),_bI=new T(function(){return _ax(_bm,function(_bJ){return _8A(_bf,_bJ);},_bg,_bi,_be,_bH);}),_bK=new T(function(){return A(_bA,[_bH,_bC,new T(function(){var _bL=E(_bD);if(!_bL[0]){return [0];}else{var _bM=_bL[1],_bN=_25(_bg,_94,_bM);return _bN[0]==0?A(_bz,[_bM]):E(_bN[1]);}}),_0,_9]);});return A(_bw,[new T(function(){var _bO=new T(function(){return E(E(_bG)[2]);});return A(_bv,[[0,_bO,_bO]]);}),function(_bP){return A(_bu,[new T(function(){return A(_bt,[[0,_1f,new T(function(){var _bQ=E(E(_bP)[1]);return [0,_bQ[1],_bQ[2],_aZ,_bQ[4],_bQ[5],_bQ[6]];})]]);}),function(_bR){return A(_bs,[new T(function(){return A(_bI,[new T(function(){return E(E(_bR)[2]);})]);}),function(_bS){var _bT=E(_bS),_bU=_bT[2],_bV=E(_bT[1]);switch(_bV[0]){case 0:return A(_br,[[0,[0,_bK,_9],_bU]]);case 1:return A(_br,[[0,[0,new T(function(){return A(_bk,[new T(function(){return A(_bA,[_bH,_bC,_bV[1],_0,_9]);}),_bV[2]]);}),_9],_bU]]);default:var _bW=_bV[1];return A(_br,[[0,[0,new T(function(){return A(_bA,[_bH,_bC,new T(function(){var _bX=_25(_bg,_94,_bW);return _bX[0]==0?A(_bz,[_bW]):E(_bX[1]);}),_0,_9]);}),[1,_bW]],_bU]]);}}]);}]);}]);}]);};};},_bY=unCStr("base"),_bZ=unCStr("Control.Exception.Base"),_c0=unCStr("PatternMatchFail"),_c1=[0,I_fromBits([18445595,3739165398]),I_fromBits([52003073,3246954884]),_bY,_bZ,_c0],_c2=[0,I_fromBits([18445595,3739165398]),I_fromBits([52003073,3246954884]),_c1,_g],_c3=function(_c4){return E(_c2);},_c5=function(_c6){var _c7=E(_c6);return _25(_21(_c7[1]),_c3,_c7[2]);},_c8=function(_c9){return E(E(_c9)[1]);},_ca=function(_cb,_cc){return _2l(E(_cb)[1],_cc);},_cd=function(_ce,_cf){return _3b(_ca,_ce,_cf);},_cg=function(_ch,_ci,_cj){return _2l(E(_ci)[1],_cj);},_ck=[0,_cg,_c8,_cd],_cl=new T(function(){return [0,_c3,_ck,_cm,_c5];}),_cm=function(_cn){return [0,_cl,_cn];},_co=unCStr("Non-exhaustive patterns in"),_cp=function(_cq,_cr){return die(new T(function(){return A(_cr,[_cq]);}));},_cs=function(_ct,_cu){var _cv=E(_cu);if(!_cv[0]){return [0,_g,_g];}else{var _cw=_cv[1];if(!A(_ct,[_cw])){return [0,_g,_cv];}else{var _cx=new T(function(){var _cy=_cs(_ct,_cv[2]);return [0,_cy[1],_cy[2]];});return [0,[1,_cw,new T(function(){return E(E(_cx)[1]);})],new T(function(){return E(E(_cx)[2]);})];}}},_cz=[0,32],_cA=[0,10],_cB=[1,_cA,_g],_cC=function(_cD){return E(E(_cD)[1])==124?false:true;},_cE=function(_cF,_cG){var _cH=_cs(_cC,unCStr(_cF)),_cI=_cH[1],_cJ=function(_cK,_cL){return _2l(_cK,new T(function(){return unAppCStr(": ",new T(function(){return _2l(_cG,new T(function(){return _2l(_cL,_cB);}));}));}));},_cM=E(_cH[2]);return _cM[0]==0?_cJ(_cI,_g):E(E(_cM[1])[1])==124?_cJ(_cI,[1,_cz,_cM[2]]):_cJ(_cI,_g);},_cN=function(_cO){return _cp([0,new T(function(){return _cE(_cO,_co);})],_cm);},_cP=new T(function(){return _cN("Text\\ParserCombinators\\ReadP.hs:(134,3)-(157,60)|function mplus");}),_cQ=function(_cR,_cS){while(1){var _cT=(function(_cU,_cV){var _cW=E(_cU);switch(_cW[0]){case 0:var _cX=E(_cV);if(!_cX[0]){return [0];}else{_cR=A(_cW[1],[_cX[1]]);_cS=_cX[2];return null;}break;case 1:var _cY=A(_cW[1],[_cV]),_cZ=_cV;_cR=_cY;_cS=_cZ;return null;case 2:return [0];case 3:return [1,[0,_cW[1],_cV],new T(function(){return _cQ(_cW[2],_cV);})];default:return E(_cW[1]);}})(_cR,_cS);if(_cT!=null){return _cT;}}},_d0=function(_d1,_d2){var _d3=new T(function(){var _d4=E(_d2);if(_d4[0]==3){return [3,_d4[1],new T(function(){return _d0(_d1,_d4[2]);})];}else{var _d5=E(_d1);if(_d5[0]==2){return E(_d4);}else{var _d6=E(_d4);if(_d6[0]==2){return E(_d5);}else{var _d7=new T(function(){var _d8=E(_d6);if(_d8[0]==4){return [1,function(_d9){return [4,new T(function(){return _2l(_cQ(_d5,_d9),_d8[1]);})];}];}else{var _da=E(_d5);if(_da[0]==1){var _db=_da[1],_dc=E(_d8);return _dc[0]==0?[1,function(_dd){return _d0(A(_db,[_dd]),_dc);}]:[1,function(_de){return _d0(A(_db,[_de]),new T(function(){return A(_dc[1],[_de]);}));}];}else{var _df=E(_d8);return _df[0]==0?E(_cP):[1,function(_dg){return _d0(_da,new T(function(){return A(_df[1],[_dg]);}));}];}}}),_dh=E(_d5);switch(_dh[0]){case 1:var _di=E(_d6);return _di[0]==4?[1,function(_dj){return [4,new T(function(){return _2l(_cQ(A(_dh[1],[_dj]),_dj),_di[1]);})];}]:E(_d7);case 4:var _dk=_dh[1],_dl=E(_d6);switch(_dl[0]){case 0:return [1,function(_dm){return [4,new T(function(){return _2l(_dk,new T(function(){return _cQ(_dl,_dm);}));})];}];case 1:return [1,function(_dn){return [4,new T(function(){return _2l(_dk,new T(function(){return _cQ(A(_dl[1],[_dn]),_dn);}));})];}];default:return [4,new T(function(){return _2l(_dk,_dl[1]);})];}break;default:return E(_d7);}}}}}),_do=E(_d1);switch(_do[0]){case 0:var _dp=E(_d2);return _dp[0]==0?[0,function(_dq){return _d0(A(_do[1],[_dq]),new T(function(){return A(_dp[1],[_dq]);}));}]:E(_d3);case 3:return [3,_do[1],new T(function(){return _d0(_do[2],_d2);})];default:return E(_d3);}},_dr=function(_ds,_dt){return E(_ds)[1]!=E(_dt)[1];},_du=function(_dv,_dw){return E(_dv)[1]==E(_dw)[1];},_dx=[0,_du,_dr],_dy=function(_dz){return E(E(_dz)[1]);},_dA=function(_dB,_dC,_dD){while(1){var _dE=E(_dC);if(!_dE[0]){return E(_dD)[0]==0?true:false;}else{var _dF=E(_dD);if(!_dF[0]){return false;}else{if(!A(_dy,[_dB,_dE[1],_dF[1]])){return false;}else{_dC=_dE[2];_dD=_dF[2];continue;}}}}},_dG=function(_dH,_dI,_dJ){return !_dA(_dH,_dI,_dJ)?true:false;},_dK=function(_dL){return [0,function(_dM,_dN){return _dA(_dL,_dM,_dN);},function(_dM,_dN){return _dG(_dL,_dM,_dN);}];},_dO=new T(function(){return _dK(_dx);}),_dP=function(_dQ,_dR){var _dS=E(_dQ);switch(_dS[0]){case 0:return [0,function(_dT){return _dP(A(_dS[1],[_dT]),_dR);}];case 1:return [1,function(_dU){return _dP(A(_dS[1],[_dU]),_dR);}];case 2:return [2];case 3:return _d0(A(_dR,[_dS[1]]),new T(function(){return _dP(_dS[2],_dR);}));default:var _dV=function(_dW){var _dX=E(_dW);if(!_dX[0]){return [0];}else{var _dY=E(_dX[1]);return _2l(_cQ(A(_dR,[_dY[1]]),_dY[2]),new T(function(){return _dV(_dX[2]);}));}},_dZ=_dV(_dS[1]);return _dZ[0]==0?[2]:[4,_dZ];}},_e0=[2],_e1=function(_e2){return [3,_e2,_e0];},_e3=function(_e4,_e5){var _e6=E(_e4);if(!_e6){return A(_e5,[_1f]);}else{var _e7=new T(function(){return _e3(_e6-1|0,_e5);});return [0,function(_e8){return E(_e7);}];}},_e9=function(_ea,_eb,_ec){var _ed=new T(function(){return A(_ea,[_e1]);});return [1,function(_ee){return A(function(_ef,_eg,_eh){while(1){var _ei=(function(_ej,_ek,_el){var _em=E(_ej);switch(_em[0]){case 0:var _en=E(_ek);if(!_en[0]){return E(_eb);}else{_ef=A(_em[1],[_en[1]]);_eg=_en[2];var _eo=_el+1|0;_eh=_eo;return null;}break;case 1:var _ep=A(_em[1],[_ek]),_eq=_ek,_eo=_el;_ef=_ep;_eg=_eq;_eh=_eo;return null;case 2:return E(_eb);case 3:return function(_er){var _es=new T(function(){return _dP(_em,_er);});return _e3(_el,function(_et){return E(_es);});};default:return function(_ah){return _dP(_em,_ah);};}})(_ef,_eg,_eh);if(_ei!=null){return _ei;}}},[_ed,_ee,0,_ec]);}];},_eu=[6],_ev=unCStr("valDig: Bad base"),_ew=new T(function(){return err(_ev);}),_ex=function(_ey,_ez){var _eA=function(_eB,_eC){var _eD=E(_eB);if(!_eD[0]){var _eE=new T(function(){return A(_eC,[_g]);});return function(_eF){return A(_eF,[_eE]);};}else{var _eG=E(_eD[1])[1],_eH=function(_eI){var _eJ=new T(function(){return _eA(_eD[2],function(_eK){return A(_eC,[[1,_eI,_eK]]);});});return function(_eL){var _eM=new T(function(){return A(_eJ,[_eL]);});return [0,function(_eN){return E(_eM);}];};};switch(E(E(_ey)[1])){case 8:if(48>_eG){var _eO=new T(function(){return A(_eC,[_g]);});return function(_eP){return A(_eP,[_eO]);};}else{if(_eG>55){var _eQ=new T(function(){return A(_eC,[_g]);});return function(_eR){return A(_eR,[_eQ]);};}else{return _eH([0,_eG-48|0]);}}break;case 10:if(48>_eG){var _eS=new T(function(){return A(_eC,[_g]);});return function(_eT){return A(_eT,[_eS]);};}else{if(_eG>57){var _eU=new T(function(){return A(_eC,[_g]);});return function(_eV){return A(_eV,[_eU]);};}else{return _eH([0,_eG-48|0]);}}break;case 16:var _eW=new T(function(){return 97>_eG?65>_eG?[0]:_eG>70?[0]:[1,[0,(_eG-65|0)+10|0]]:_eG>102?65>_eG?[0]:_eG>70?[0]:[1,[0,(_eG-65|0)+10|0]]:[1,[0,(_eG-97|0)+10|0]];});if(48>_eG){var _eX=E(_eW);if(!_eX[0]){var _eY=new T(function(){return A(_eC,[_g]);});return function(_eZ){return A(_eZ,[_eY]);};}else{return _eH(_eX[1]);}}else{if(_eG>57){var _f0=E(_eW);if(!_f0[0]){var _f1=new T(function(){return A(_eC,[_g]);});return function(_f2){return A(_f2,[_f1]);};}else{return _eH(_f0[1]);}}else{return _eH([0,_eG-48|0]);}}break;default:return E(_ew);}}};return [1,function(_f3){return A(_eA,[_f3,_1m,function(_f4){var _f5=E(_f4);return _f5[0]==0?[2]:A(_ez,[_f5]);}]);}];},_f6=[0,10],_f7=[0,1],_f8=[0,2147483647],_f9=function(_fa,_fb){while(1){var _fc=E(_fa);if(!_fc[0]){var _fd=_fc[1],_fe=E(_fb);if(!_fe[0]){var _ff=_fe[1],_fg=addC(_fd,_ff);if(!E(_fg[2])){return [0,_fg[1]];}else{_fa=[1,I_fromInt(_fd)];_fb=[1,I_fromInt(_ff)];continue;}}else{_fa=[1,I_fromInt(_fd)];_fb=_fe;continue;}}else{var _fh=E(_fb);if(!_fh[0]){_fa=_fc;_fb=[1,I_fromInt(_fh[1])];continue;}else{return [1,I_add(_fc[1],_fh[1])];}}}},_fi=new T(function(){return _f9(_f8,_f7);}),_fj=function(_fk){var _fl=E(_fk);if(!_fl[0]){var _fm=E(_fl[1]);return _fm==(-2147483648)?E(_fi):[0, -_fm];}else{return [1,I_negate(_fl[1])];}},_fn=[0,10],_fo=[0,0],_fp=function(_fq,_fr){while(1){var _fs=E(_fq);if(!_fs[0]){var _ft=_fs[1],_fu=E(_fr);if(!_fu[0]){var _fv=_fu[1];if(!(imul(_ft,_fv)|0)){return [0,imul(_ft,_fv)|0];}else{_fq=[1,I_fromInt(_ft)];_fr=[1,I_fromInt(_fv)];continue;}}else{_fq=[1,I_fromInt(_ft)];_fr=_fu;continue;}}else{var _fw=E(_fr);if(!_fw[0]){_fq=_fs;_fr=[1,I_fromInt(_fw[1])];continue;}else{return [1,I_mul(_fs[1],_fw[1])];}}}},_fx=function(_fy,_fz,_fA){while(1){var _fB=E(_fA);if(!_fB[0]){return E(_fz);}else{var _fC=_f9(_fp(_fz,_fy),_fB[1]);_fA=_fB[2];_fz=_fC;continue;}}},_fD=function(_fE){var _fF=new T(function(){return _d0(_d0([0,function(_fG){return E(E(_fG)[1])==45?_ex(_f6,function(_fH){return A(_fE,[[1,new T(function(){return _fj(_fx(_fn,_fo,_fH));})]]);}):[2];}],[0,function(_fI){return E(E(_fI)[1])==43?_ex(_f6,function(_fJ){return A(_fE,[[1,new T(function(){return _fx(_fn,_fo,_fJ);})]]);}):[2];}]),new T(function(){return _ex(_f6,function(_fK){return A(_fE,[[1,new T(function(){return _fx(_fn,_fo,_fK);})]]);});}));});return _d0([0,function(_fL){return E(E(_fL)[1])==101?E(_fF):[2];}],[0,function(_fM){return E(E(_fM)[1])==69?E(_fF):[2];}]);},_fN=function(_fO){return A(_fO,[_9]);},_fP=function(_fQ){return A(_fQ,[_9]);},_fR=function(_fS){var _fT=new T(function(){return _ex(_f6,function(_fU){return A(_fS,[[1,_fU]]);});});return [0,function(_fV){return E(E(_fV)[1])==46?E(_fT):[2];}];},_fW=function(_fX){return _ex(_f6,function(_fY){return _e9(_fR,_fN,function(_fZ){return _e9(_fD,_fP,function(_g0){return A(_fX,[[5,[1,_fY,_fZ,_g0]]]);});});});},_g1=function(_g2,_g3,_g4){while(1){var _g5=E(_g4);if(!_g5[0]){return false;}else{if(!A(_dy,[_g2,_g3,_g5[1]])){_g4=_g5[2];continue;}else{return true;}}}},_g6=unCStr("!@#$%&*+./<=>?\\^|:-~"),_g7=function(_g8){return _g1(_dx,_g8,_g6);},_g9=[0,8],_ga=[0,16],_gb=function(_gc){var _gd=new T(function(){return _ex(_ga,function(_ge){return A(_gc,[[5,[0,_ga,_ge]]]);});}),_gf=new T(function(){return _ex(_g9,function(_gg){return A(_gc,[[5,[0,_g9,_gg]]]);});}),_gh=new T(function(){return _ex(_ga,function(_gi){return A(_gc,[[5,[0,_ga,_gi]]]);});}),_gj=new T(function(){return _ex(_g9,function(_gk){return A(_gc,[[5,[0,_g9,_gk]]]);});});return [0,function(_gl){return E(E(_gl)[1])==48?E([0,function(_gm){switch(E(E(_gm)[1])){case 79:return E(_gj);case 88:return E(_gh);case 111:return E(_gf);case 120:return E(_gd);default:return [2];}}]):[2];}];},_gn=true,_go=function(_gp){var _gq=new T(function(){return A(_gp,[_ga]);}),_gr=new T(function(){return A(_gp,[_g9]);}),_gs=new T(function(){return A(_gp,[_ga]);}),_gt=new T(function(){return A(_gp,[_g9]);});return [0,function(_gu){switch(E(E(_gu)[1])){case 79:return E(_gt);case 88:return E(_gs);case 111:return E(_gr);case 120:return E(_gq);default:return [2];}}];},_gv=function(_gw){return A(_gw,[_f6]);},_gx=function(_gy){return err(unAppCStr("Prelude.chr: bad argument: ",new T(function(){return _4i(9,_gy,_g);})));},_gz=function(_gA){var _gB=E(_gA);return _gB[0]==0?E(_gB[1]):I_toInt(_gB[1]);},_gC=function(_gD,_gE){var _gF=E(_gD);if(!_gF[0]){var _gG=_gF[1],_gH=E(_gE);return _gH[0]==0?_gG<=_gH[1]:I_compareInt(_gH[1],_gG)>=0;}else{var _gI=_gF[1],_gJ=E(_gE);return _gJ[0]==0?I_compareInt(_gI,_gJ[1])<=0:I_compare(_gI,_gJ[1])<=0;}},_gK=function(_gL){return [2];},_gM=function(_gN){var _gO=E(_gN);if(!_gO[0]){return E(_gK);}else{var _gP=_gO[1],_gQ=E(_gO[2]);if(!_gQ[0]){return E(_gP);}else{var _gR=new T(function(){return _gM(_gQ);});return function(_gS){return _d0(A(_gP,[_gS]),new T(function(){return A(_gR,[_gS]);}));};}}},_gT=unCStr("NUL"),_gU=function(_gV){return [2];},_gW=function(_gX){return _gU(_gX);},_gY=function(_gZ,_h0){var _h1=function(_h2,_h3){var _h4=E(_h2);if(!_h4[0]){return function(_h5){return A(_h5,[_gZ]);};}else{var _h6=E(_h3);if(!_h6[0]){return E(_gU);}else{if(E(_h4[1])[1]!=E(_h6[1])[1]){return E(_gW);}else{var _h7=new T(function(){return _h1(_h4[2],_h6[2]);});return function(_h8){var _h9=new T(function(){return A(_h7,[_h8]);});return [0,function(_ha){return E(_h9);}];};}}}};return [1,function(_hb){return A(_h1,[_gZ,_hb,_h0]);}];},_hc=[0,0],_hd=function(_he){var _hf=new T(function(){return A(_he,[_hc]);});return _gY(_gT,function(_hg){return E(_hf);});},_hh=unCStr("STX"),_hi=[0,2],_hj=function(_hk){var _hl=new T(function(){return A(_hk,[_hi]);});return _gY(_hh,function(_hm){return E(_hl);});},_hn=unCStr("ETX"),_ho=[0,3],_hp=function(_hq){var _hr=new T(function(){return A(_hq,[_ho]);});return _gY(_hn,function(_hs){return E(_hr);});},_ht=unCStr("EOT"),_hu=[0,4],_hv=function(_hw){var _hx=new T(function(){return A(_hw,[_hu]);});return _gY(_ht,function(_hy){return E(_hx);});},_hz=unCStr("ENQ"),_hA=[0,5],_hB=function(_hC){var _hD=new T(function(){return A(_hC,[_hA]);});return _gY(_hz,function(_hE){return E(_hD);});},_hF=unCStr("ACK"),_hG=[0,6],_hH=function(_hI){var _hJ=new T(function(){return A(_hI,[_hG]);});return _gY(_hF,function(_hK){return E(_hJ);});},_hL=unCStr("BEL"),_hM=[0,7],_hN=function(_hO){var _hP=new T(function(){return A(_hO,[_hM]);});return _gY(_hL,function(_hQ){return E(_hP);});},_hR=unCStr("BS"),_hS=[0,8],_hT=function(_hU){var _hV=new T(function(){return A(_hU,[_hS]);});return _gY(_hR,function(_hW){return E(_hV);});},_hX=unCStr("HT"),_hY=[0,9],_hZ=function(_i0){var _i1=new T(function(){return A(_i0,[_hY]);});return _gY(_hX,function(_i2){return E(_i1);});},_i3=unCStr("LF"),_i4=[0,10],_i5=function(_i6){var _i7=new T(function(){return A(_i6,[_i4]);});return _gY(_i3,function(_i8){return E(_i7);});},_i9=unCStr("VT"),_ia=[0,11],_ib=function(_ic){var _id=new T(function(){return A(_ic,[_ia]);});return _gY(_i9,function(_ie){return E(_id);});},_if=unCStr("FF"),_ig=[0,12],_ih=function(_ii){var _ij=new T(function(){return A(_ii,[_ig]);});return _gY(_if,function(_ik){return E(_ij);});},_il=unCStr("CR"),_im=[0,13],_in=function(_io){var _ip=new T(function(){return A(_io,[_im]);});return _gY(_il,function(_iq){return E(_ip);});},_ir=unCStr("SI"),_is=[0,15],_it=function(_iu){var _iv=new T(function(){return A(_iu,[_is]);});return _gY(_ir,function(_iw){return E(_iv);});},_ix=unCStr("DLE"),_iy=[0,16],_iz=function(_iA){var _iB=new T(function(){return A(_iA,[_iy]);});return _gY(_ix,function(_iC){return E(_iB);});},_iD=unCStr("DC1"),_iE=[0,17],_iF=function(_iG){var _iH=new T(function(){return A(_iG,[_iE]);});return _gY(_iD,function(_iI){return E(_iH);});},_iJ=unCStr("DC2"),_iK=[0,18],_iL=function(_iM){var _iN=new T(function(){return A(_iM,[_iK]);});return _gY(_iJ,function(_iO){return E(_iN);});},_iP=unCStr("DC3"),_iQ=[0,19],_iR=function(_iS){var _iT=new T(function(){return A(_iS,[_iQ]);});return _gY(_iP,function(_iU){return E(_iT);});},_iV=unCStr("DC4"),_iW=[0,20],_iX=function(_iY){var _iZ=new T(function(){return A(_iY,[_iW]);});return _gY(_iV,function(_j0){return E(_iZ);});},_j1=unCStr("NAK"),_j2=[0,21],_j3=function(_j4){var _j5=new T(function(){return A(_j4,[_j2]);});return _gY(_j1,function(_j6){return E(_j5);});},_j7=unCStr("SYN"),_j8=[0,22],_j9=function(_ja){var _jb=new T(function(){return A(_ja,[_j8]);});return _gY(_j7,function(_jc){return E(_jb);});},_jd=unCStr("ETB"),_je=[0,23],_jf=function(_jg){var _jh=new T(function(){return A(_jg,[_je]);});return _gY(_jd,function(_ji){return E(_jh);});},_jj=unCStr("CAN"),_jk=[0,24],_jl=function(_jm){var _jn=new T(function(){return A(_jm,[_jk]);});return _gY(_jj,function(_jo){return E(_jn);});},_jp=unCStr("EM"),_jq=[0,25],_jr=function(_js){var _jt=new T(function(){return A(_js,[_jq]);});return _gY(_jp,function(_ju){return E(_jt);});},_jv=unCStr("SUB"),_jw=[0,26],_jx=function(_jy){var _jz=new T(function(){return A(_jy,[_jw]);});return _gY(_jv,function(_jA){return E(_jz);});},_jB=unCStr("ESC"),_jC=[0,27],_jD=function(_jE){var _jF=new T(function(){return A(_jE,[_jC]);});return _gY(_jB,function(_jG){return E(_jF);});},_jH=unCStr("FS"),_jI=[0,28],_jJ=function(_jK){var _jL=new T(function(){return A(_jK,[_jI]);});return _gY(_jH,function(_jM){return E(_jL);});},_jN=unCStr("GS"),_jO=[0,29],_jP=function(_jQ){var _jR=new T(function(){return A(_jQ,[_jO]);});return _gY(_jN,function(_jS){return E(_jR);});},_jT=unCStr("RS"),_jU=[0,30],_jV=function(_jW){var _jX=new T(function(){return A(_jW,[_jU]);});return _gY(_jT,function(_jY){return E(_jX);});},_jZ=unCStr("US"),_k0=[0,31],_k1=function(_k2){var _k3=new T(function(){return A(_k2,[_k0]);});return _gY(_jZ,function(_k4){return E(_k3);});},_k5=unCStr("SP"),_k6=[0,32],_k7=function(_k8){var _k9=new T(function(){return A(_k8,[_k6]);});return _gY(_k5,function(_ka){return E(_k9);});},_kb=unCStr("DEL"),_kc=[0,127],_kd=function(_ke){var _kf=new T(function(){return A(_ke,[_kc]);});return _gY(_kb,function(_kg){return E(_kf);});},_kh=[1,_kd,_g],_ki=[1,_k7,_kh],_kj=[1,_k1,_ki],_kk=[1,_jV,_kj],_kl=[1,_jP,_kk],_km=[1,_jJ,_kl],_kn=[1,_jD,_km],_ko=[1,_jx,_kn],_kp=[1,_jr,_ko],_kq=[1,_jl,_kp],_kr=[1,_jf,_kq],_ks=[1,_j9,_kr],_kt=[1,_j3,_ks],_ku=[1,_iX,_kt],_kv=[1,_iR,_ku],_kw=[1,_iL,_kv],_kx=[1,_iF,_kw],_ky=[1,_iz,_kx],_kz=[1,_it,_ky],_kA=[1,_in,_kz],_kB=[1,_ih,_kA],_kC=[1,_ib,_kB],_kD=[1,_i5,_kC],_kE=[1,_hZ,_kD],_kF=[1,_hT,_kE],_kG=[1,_hN,_kF],_kH=[1,_hH,_kG],_kI=[1,_hB,_kH],_kJ=[1,_hv,_kI],_kK=[1,_hp,_kJ],_kL=[1,_hj,_kK],_kM=[1,_hd,_kL],_kN=unCStr("SOH"),_kO=[0,1],_kP=function(_kQ){var _kR=new T(function(){return A(_kQ,[_kO]);});return _gY(_kN,function(_kS){return E(_kR);});},_kT=unCStr("SO"),_kU=[0,14],_kV=function(_kW){var _kX=new T(function(){return A(_kW,[_kU]);});return _gY(_kT,function(_kY){return E(_kX);});},_kZ=function(_l0){return _e9(_kP,_kV,_l0);},_l1=[1,_kZ,_kM],_l2=new T(function(){return _gM(_l1);}),_l3=[0,1114111],_l4=[0,34],_l5=[0,_l4,_gn],_l6=[0,39],_l7=[0,_l6,_gn],_l8=[0,92],_l9=[0,_l8,_gn],_la=[0,_hM,_gn],_lb=[0,_hS,_gn],_lc=[0,_ig,_gn],_ld=[0,_i4,_gn],_le=[0,_im,_gn],_lf=[0,_hY,_gn],_lg=[0,_ia,_gn],_lh=[0,_hc,_gn],_li=[0,_kO,_gn],_lj=[0,_hi,_gn],_lk=[0,_ho,_gn],_ll=[0,_hu,_gn],_lm=[0,_hA,_gn],_ln=[0,_hG,_gn],_lo=[0,_hM,_gn],_lp=[0,_hS,_gn],_lq=[0,_hY,_gn],_lr=[0,_i4,_gn],_ls=[0,_ia,_gn],_lt=[0,_ig,_gn],_lu=[0,_im,_gn],_lv=[0,_kU,_gn],_lw=[0,_is,_gn],_lx=[0,_iy,_gn],_ly=[0,_iE,_gn],_lz=[0,_iK,_gn],_lA=[0,_iQ,_gn],_lB=[0,_iW,_gn],_lC=[0,_j2,_gn],_lD=[0,_j8,_gn],_lE=[0,_je,_gn],_lF=[0,_jk,_gn],_lG=[0,_jq,_gn],_lH=[0,_jw,_gn],_lI=[0,_jC,_gn],_lJ=[0,_jI,_gn],_lK=[0,_jO,_gn],_lL=[0,_jU,_gn],_lM=[0,_k0,_gn],_lN=function(_lO){return [0,_lO];},_lP=function(_lQ){var _lR=new T(function(){return A(_lQ,[_lg]);}),_lS=new T(function(){return A(_lQ,[_lf]);}),_lT=new T(function(){return A(_lQ,[_le]);}),_lU=new T(function(){return A(_lQ,[_ld]);}),_lV=new T(function(){return A(_lQ,[_lc]);}),_lW=new T(function(){return A(_lQ,[_lb]);}),_lX=new T(function(){return A(_lQ,[_la]);}),_lY=new T(function(){return A(_lQ,[_l9]);}),_lZ=new T(function(){return A(_lQ,[_l7]);}),_m0=new T(function(){return A(_lQ,[_l5]);});return _d0([0,function(_m1){switch(E(E(_m1)[1])){case 34:return E(_m0);case 39:return E(_lZ);case 92:return E(_lY);case 97:return E(_lX);case 98:return E(_lW);case 102:return E(_lV);case 110:return E(_lU);case 114:return E(_lT);case 116:return E(_lS);case 118:return E(_lR);default:return [2];}}],new T(function(){return _d0(_e9(_go,_gv,function(_m2){var _m3=new T(function(){return _lN(E(_m2)[1]);});return _ex(_m2,function(_m4){var _m5=_fx(_m3,_fo,_m4);return !_gC(_m5,_l3)?[2]:A(_lQ,[[0,new T(function(){var _m6=_gz(_m5);return _m6>>>0>1114111?_gx(_m6):[0,_m6];}),_gn]]);});}),new T(function(){var _m7=new T(function(){return A(_lQ,[_lM]);}),_m8=new T(function(){return A(_lQ,[_lL]);}),_m9=new T(function(){return A(_lQ,[_lK]);}),_ma=new T(function(){return A(_lQ,[_lJ]);}),_mb=new T(function(){return A(_lQ,[_lI]);}),_mc=new T(function(){return A(_lQ,[_lH]);}),_md=new T(function(){return A(_lQ,[_lG]);}),_me=new T(function(){return A(_lQ,[_lF]);}),_mf=new T(function(){return A(_lQ,[_lE]);}),_mg=new T(function(){return A(_lQ,[_lD]);}),_mh=new T(function(){return A(_lQ,[_lC]);}),_mi=new T(function(){return A(_lQ,[_lB]);}),_mj=new T(function(){return A(_lQ,[_lA]);}),_mk=new T(function(){return A(_lQ,[_lz]);}),_ml=new T(function(){return A(_lQ,[_ly]);}),_mm=new T(function(){return A(_lQ,[_lx]);}),_mn=new T(function(){return A(_lQ,[_lw]);}),_mo=new T(function(){return A(_lQ,[_lv]);}),_mp=new T(function(){return A(_lQ,[_lu]);}),_mq=new T(function(){return A(_lQ,[_lt]);}),_mr=new T(function(){return A(_lQ,[_ls]);}),_ms=new T(function(){return A(_lQ,[_lr]);}),_mt=new T(function(){return A(_lQ,[_lq]);}),_mu=new T(function(){return A(_lQ,[_lp]);}),_mv=new T(function(){return A(_lQ,[_lo]);}),_mw=new T(function(){return A(_lQ,[_ln]);}),_mx=new T(function(){return A(_lQ,[_lm]);}),_my=new T(function(){return A(_lQ,[_ll]);}),_mz=new T(function(){return A(_lQ,[_lk]);}),_mA=new T(function(){return A(_lQ,[_lj]);}),_mB=new T(function(){return A(_lQ,[_li]);}),_mC=new T(function(){return A(_lQ,[_lh]);});return _d0([0,function(_mD){return E(E(_mD)[1])==94?E([0,function(_mE){switch(E(E(_mE)[1])){case 64:return E(_mC);case 65:return E(_mB);case 66:return E(_mA);case 67:return E(_mz);case 68:return E(_my);case 69:return E(_mx);case 70:return E(_mw);case 71:return E(_mv);case 72:return E(_mu);case 73:return E(_mt);case 74:return E(_ms);case 75:return E(_mr);case 76:return E(_mq);case 77:return E(_mp);case 78:return E(_mo);case 79:return E(_mn);case 80:return E(_mm);case 81:return E(_ml);case 82:return E(_mk);case 83:return E(_mj);case 84:return E(_mi);case 85:return E(_mh);case 86:return E(_mg);case 87:return E(_mf);case 88:return E(_me);case 89:return E(_md);case 90:return E(_mc);case 91:return E(_mb);case 92:return E(_ma);case 93:return E(_m9);case 94:return E(_m8);case 95:return E(_m7);default:return [2];}}]):[2];}],new T(function(){return A(_l2,[function(_mF){return A(_lQ,[[0,_mF,_gn]]);}]);}));}));}));},_mG=function(_mH){return A(_mH,[_1f]);},_mI=function(_mJ){var _mK=E(_mJ);if(!_mK[0]){return E(_mG);}else{var _mL=_mK[2],_mM=E(E(_mK[1])[1]);switch(_mM){case 9:var _mN=new T(function(){return _mI(_mL);});return function(_mO){var _mP=new T(function(){return A(_mN,[_mO]);});return [0,function(_mQ){return E(_mP);}];};case 10:var _mR=new T(function(){return _mI(_mL);});return function(_mS){var _mT=new T(function(){return A(_mR,[_mS]);});return [0,function(_mU){return E(_mT);}];};case 11:var _mV=new T(function(){return _mI(_mL);});return function(_mW){var _mX=new T(function(){return A(_mV,[_mW]);});return [0,function(_mY){return E(_mX);}];};case 12:var _mZ=new T(function(){return _mI(_mL);});return function(_n0){var _n1=new T(function(){return A(_mZ,[_n0]);});return [0,function(_n2){return E(_n1);}];};case 13:var _n3=new T(function(){return _mI(_mL);});return function(_n4){var _n5=new T(function(){return A(_n3,[_n4]);});return [0,function(_n6){return E(_n5);}];};case 32:var _n7=new T(function(){return _mI(_mL);});return function(_n8){var _n9=new T(function(){return A(_n7,[_n8]);});return [0,function(_na){return E(_n9);}];};case 160:var _nb=new T(function(){return _mI(_mL);});return function(_nc){var _nd=new T(function(){return A(_nb,[_nc]);});return [0,function(_ne){return E(_nd);}];};default:var _nf=u_iswspace(_mM);if(!E(_nf)){return E(_mG);}else{var _ng=new T(function(){return _mI(_mL);});return function(_nh){var _ni=new T(function(){return A(_ng,[_nh]);});return [0,function(_nj){return E(_ni);}];};}}}},_nk=function(_nl){var _nm=new T(function(){return _lP(_nl);}),_nn=new T(function(){return _nk(_nl);}),_no=[1,function(_np){return A(_mI,[_np,function(_nq){return E([0,function(_nr){return E(E(_nr)[1])==92?E(_nn):[2];}]);}]);}];return _d0([0,function(_ns){return E(E(_ns)[1])==92?E([0,function(_nt){var _nu=E(E(_nt)[1]);switch(_nu){case 9:return E(_no);case 10:return E(_no);case 11:return E(_no);case 12:return E(_no);case 13:return E(_no);case 32:return E(_no);case 38:return E(_nn);case 160:return E(_no);default:var _nv=u_iswspace(_nu);return E(_nv)==0?[2]:E(_no);}}]):[2];}],[0,function(_nw){var _nx=E(_nw);return E(_nx[1])==92?E(_nm):A(_nl,[[0,_nx,_0]]);}]);},_ny=function(_nz,_nA){var _nB=new T(function(){return A(_nA,[[1,new T(function(){return A(_nz,[_g]);})]]);});return _nk(function(_nC){var _nD=E(_nC),_nE=E(_nD[1]);return E(_nE[1])==34?!E(_nD[2])?E(_nB):_ny(function(_nF){return A(_nz,[[1,_nE,_nF]]);},_nA):_ny(function(_nG){return A(_nz,[[1,_nE,_nG]]);},_nA);});},_nH=unCStr("_\'"),_nI=function(_nJ){var _nK=u_iswalnum(_nJ);return E(_nK)==0?_g1(_dx,[0,_nJ],_nH):true;},_nL=function(_nM){return _nI(E(_nM)[1]);},_nN=unCStr(",;()[]{}`"),_nO=function(_nP){return A(_nP,[_g]);},_nQ=function(_nR,_nS){var _nT=function(_nU){var _nV=E(_nU);if(!_nV[0]){return E(_nO);}else{var _nW=_nV[1];if(!A(_nR,[_nW])){return E(_nO);}else{var _nX=new T(function(){return _nT(_nV[2]);});return function(_nY){var _nZ=new T(function(){return A(_nX,[function(_o0){return A(_nY,[[1,_nW,_o0]]);}]);});return [0,function(_o1){return E(_nZ);}];};}}};return [1,function(_o2){return A(_nT,[_o2,_nS]);}];},_o3=unCStr(".."),_o4=unCStr("::"),_o5=unCStr("->"),_o6=[0,64],_o7=[1,_o6,_g],_o8=[0,126],_o9=[1,_o8,_g],_oa=unCStr("=>"),_ob=[1,_oa,_g],_oc=[1,_o9,_ob],_od=[1,_o7,_oc],_oe=[1,_o5,_od],_of=unCStr("<-"),_og=[1,_of,_oe],_oh=[0,124],_oi=[1,_oh,_g],_oj=[1,_oi,_og],_ok=[1,_l8,_g],_ol=[1,_ok,_oj],_om=[0,61],_on=[1,_om,_g],_oo=[1,_on,_ol],_op=[1,_o4,_oo],_oq=[1,_o3,_op],_or=function(_os){var _ot=new T(function(){return A(_os,[_eu]);});return _d0([1,function(_ou){return E(_ou)[0]==0?E(_ot):[2];}],new T(function(){var _ov=new T(function(){return _lP(function(_ow){var _ox=E(_ow);return (function(_oy,_oz){var _oA=new T(function(){return A(_os,[[0,_oy]]);});return !E(_oz)?E(E(_oy)[1])==39?[2]:[0,function(_oB){return E(E(_oB)[1])==39?E(_oA):[2];}]:[0,function(_oC){return E(E(_oC)[1])==39?E(_oA):[2];}];})(_ox[1],_ox[2]);});});return _d0([0,function(_oD){return E(E(_oD)[1])==39?E([0,function(_oE){var _oF=E(_oE);switch(E(_oF[1])){case 39:return [2];case 92:return E(_ov);default:var _oG=new T(function(){return A(_os,[[0,_oF]]);});return [0,function(_oH){return E(E(_oH)[1])==39?E(_oG):[2];}];}}]):[2];}],new T(function(){var _oI=new T(function(){return _ny(_1m,_os);});return _d0([0,function(_oJ){return E(E(_oJ)[1])==34?E(_oI):[2];}],new T(function(){return _d0([0,function(_oK){return !_g1(_dx,_oK,_nN)?[2]:A(_os,[[2,[1,_oK,_g]]]);}],new T(function(){return _d0([0,function(_oL){return !_g1(_dx,_oL,_g6)?[2]:_nQ(_g7,function(_oM){var _oN=[1,_oL,_oM];return !_g1(_dO,_oN,_oq)?A(_os,[[4,_oN]]):A(_os,[[2,_oN]]);});}],new T(function(){return _d0([0,function(_oO){var _oP=E(_oO),_oQ=_oP[1],_oR=u_iswalpha(_oQ);return E(_oR)==0?E(_oQ)==95?_nQ(_nL,function(_oS){return A(_os,[[3,[1,_oP,_oS]]]);}):[2]:_nQ(_nL,function(_oT){return A(_os,[[3,[1,_oP,_oT]]]);});}],new T(function(){return _e9(_gb,_fW,_os);}));}));}));}));}));}));},_oU=function(_oV){var _oW=new T(function(){return _or(_oV);});return [1,function(_oX){return A(_mI,[_oX,function(_oY){return E(_oW);}]);}];},_oZ=[0,0],_p0=function(_p1,_p2){var _p3=new T(function(){return A(_p1,[_oZ,function(_p4){var _p5=new T(function(){return A(_p2,[_p4]);});return _oU(function(_p6){var _p7=E(_p6);if(_p7[0]==2){var _p8=E(_p7[1]);return _p8[0]==0?[2]:E(E(_p8[1])[1])==41?E(_p8[2])[0]==0?E(_p5):[2]:[2];}else{return [2];}});}]);});return _oU(function(_p9){var _pa=E(_p9);if(_pa[0]==2){var _pb=E(_pa[1]);return _pb[0]==0?[2]:E(E(_pb[1])[1])==40?E(_pb[2])[0]==0?E(_p3):[2]:[2];}else{return [2];}});},_pc=function(_pd){return _d0(_oU(function(_pe){var _pf=E(_pe);return _pf[0]==0?A(_pd,[_pf[1]]):[2];}),new T(function(){return _p0(_pg,_pd);}));},_pg=function(_ph,_pi){return _pc(_pi);},_pj=function(_pk,_pl){var _pm=function(_pn,_po){var _pp=new T(function(){return A(_po,[_g]);}),_pq=new T(function(){return A(_pk,[_oZ,function(_pr){return _pm(_gn,function(_ps){return A(_po,[[1,_pr,_ps]]);});}]);});return _oU(function(_pt){var _pu=E(_pt);if(_pu[0]==2){var _pv=E(_pu[1]);if(!_pv[0]){return [2];}else{var _pw=_pv[2];switch(E(E(_pv[1])[1])){case 44:return E(_pw)[0]==0?!E(_pn)?[2]:E(_pq):[2];case 93:return E(_pw)[0]==0?E(_pp):[2];default:return [2];}}}else{return [2];}});},_px=function(_py){var _pz=new T(function(){return _d0(_pm(_0,_py),new T(function(){return A(_pk,[_oZ,function(_pA){return _pm(_gn,function(_pB){return A(_py,[[1,_pA,_pB]]);});}]);}));});return _d0(_oU(function(_pC){var _pD=E(_pC);if(_pD[0]==2){var _pE=E(_pD[1]);return _pE[0]==0?[2]:E(E(_pE[1])[1])==91?E(_pE[2])[0]==0?E(_pz):[2]:[2];}else{return [2];}}),new T(function(){return _p0(function(_pF,_pG){return _px(_pG);},_py);}));};return _px(_pl);},_pH=function(_pI){return _d0(_d0(_oU(function(_pJ){var _pK=E(_pJ);return _pK[0]==1?A(_pI,[_pK[1]]):[2];}),new T(function(){return _pj(_pg,_pI);})),new T(function(){return _p0(_pL,_pI);}));},_pL=function(_pM,_pN){return _pH(_pN);},_pO=new T(function(){return _p0(_pL,_e1);}),_pP=new T(function(){return _pj(_pg,_e1);}),_pQ=function(_pR){var _pS=E(_pR);return _pS[0]==1?[3,_pS[1],_e0]:[2];},_pT=new T(function(){return _or(_pQ);}),_pU=function(_pV){return E(_pT);},_pW=function(_pX){return A(_mI,[_pX,_pU]);},_pY=[1,_pW],_pZ=new T(function(){return _d0(_pY,_pP);}),_q0=new T(function(){return _d0(_pZ,_pO);}),_q1=function(_q2){return _cQ(_q0,_q2);},_q3=new T(function(){return _pc(_e1);}),_q4=function(_q2){return _cQ(_q3,_q2);},_q5=function(_q6){return E(_q4);},_q7=[0,_q5,_q1,_pg,_pL],_q8=function(_q9){return E(E(_q9)[4]);},_qa=function(_qb,_qc,_qd){return _pj(new T(function(){return _q8(_qb);}),_qd);},_qe=function(_qf){var _qg=new T(function(){return _pj(new T(function(){return _q8(_qf);}),_e1);});return function(_ah){return _cQ(_qg,_ah);};},_qh=function(_qi,_qj){var _qk=new T(function(){return A(_q8,[_qi,_qj,_e1]);});return function(_ah){return _cQ(_qk,_ah);};},_ql=function(_qm){return [0,function(_q2){return _qh(_qm,_q2);},new T(function(){return _qe(_qm);}),new T(function(){return _q8(_qm);}),function(_qn,_q2){return _qa(_qm,_qn,_q2);}];},_qo=new T(function(){return _ql(_q7);}),_qp=new T(function(){return E(_qo);}),_qq=unCStr("Prelude.(!!): negative index\n"),_qr=new T(function(){return err(_qq);}),_qs=unCStr("Prelude.(!!): index too large\n"),_qt=new T(function(){return err(_qs);}),_qu=function(_qv,_qw){while(1){var _qx=E(_qv);if(!_qx[0]){return E(_qt);}else{var _qy=E(_qw);if(!_qy){return E(_qx[1]);}else{_qv=_qx[2];_qw=_qy-1|0;continue;}}}},_qz=unCStr("ACK"),_qA=unCStr("BEL"),_qB=unCStr("BS"),_qC=unCStr("SP"),_qD=[1,_qC,_g],_qE=unCStr("US"),_qF=[1,_qE,_qD],_qG=unCStr("RS"),_qH=[1,_qG,_qF],_qI=unCStr("GS"),_qJ=[1,_qI,_qH],_qK=unCStr("FS"),_qL=[1,_qK,_qJ],_qM=unCStr("ESC"),_qN=[1,_qM,_qL],_qO=unCStr("SUB"),_qP=[1,_qO,_qN],_qQ=unCStr("EM"),_qR=[1,_qQ,_qP],_qS=unCStr("CAN"),_qT=[1,_qS,_qR],_qU=unCStr("ETB"),_qV=[1,_qU,_qT],_qW=unCStr("SYN"),_qX=[1,_qW,_qV],_qY=unCStr("NAK"),_qZ=[1,_qY,_qX],_r0=unCStr("DC4"),_r1=[1,_r0,_qZ],_r2=unCStr("DC3"),_r3=[1,_r2,_r1],_r4=unCStr("DC2"),_r5=[1,_r4,_r3],_r6=unCStr("DC1"),_r7=[1,_r6,_r5],_r8=unCStr("DLE"),_r9=[1,_r8,_r7],_ra=unCStr("SI"),_rb=[1,_ra,_r9],_rc=unCStr("SO"),_rd=[1,_rc,_rb],_re=unCStr("CR"),_rf=[1,_re,_rd],_rg=unCStr("FF"),_rh=[1,_rg,_rf],_ri=unCStr("VT"),_rj=[1,_ri,_rh],_rk=unCStr("LF"),_rl=[1,_rk,_rj],_rm=unCStr("HT"),_rn=[1,_rm,_rl],_ro=[1,_qB,_rn],_rp=[1,_qA,_ro],_rq=[1,_qz,_rp],_rr=unCStr("ENQ"),_rs=[1,_rr,_rq],_rt=unCStr("EOT"),_ru=[1,_rt,_rs],_rv=unCStr("ETX"),_rw=[1,_rv,_ru],_rx=unCStr("STX"),_ry=[1,_rx,_rw],_rz=unCStr("SOH"),_rA=[1,_rz,_ry],_rB=unCStr("NUL"),_rC=[1,_rB,_rA],_rD=[0,92],_rE=unCStr("\\DEL"),_rF=unCStr("\\a"),_rG=unCStr("\\\\"),_rH=unCStr("\\SO"),_rI=unCStr("\\r"),_rJ=unCStr("\\f"),_rK=unCStr("\\v"),_rL=unCStr("\\n"),_rM=unCStr("\\t"),_rN=unCStr("\\b"),_rO=function(_rP,_rQ){if(_rP<=127){var _rR=E(_rP);switch(_rR){case 92:return _2l(_rG,_rQ);case 127:return _2l(_rE,_rQ);default:if(_rR<32){var _rS=E(_rR);switch(_rS){case 7:return _2l(_rF,_rQ);case 8:return _2l(_rN,_rQ);case 9:return _2l(_rM,_rQ);case 10:return _2l(_rL,_rQ);case 11:return _2l(_rK,_rQ);case 12:return _2l(_rJ,_rQ);case 13:return _2l(_rI,_rQ);case 14:return _2l(_rH,new T(function(){var _rT=E(_rQ);return _rT[0]==0?[0]:E(E(_rT[1])[1])==72?unAppCStr("\\&",_rT):E(_rT);}));default:return _2l([1,_rD,new T(function(){var _rU=_rS;return _rU>=0?_qu(_rC,_rU):E(_qr);})],_rQ);}}else{return [1,[0,_rR],_rQ];}}}else{return [1,_rD,new T(function(){var _rV=jsShowI(_rP);return _2l(fromJSStr(_rV),new T(function(){var _rW=E(_rQ);if(!_rW[0]){return [0];}else{var _rX=E(_rW[1])[1];return _rX<48?E(_rW):_rX>57?E(_rW):unAppCStr("\\&",_rW);}}));})];}},_rY=[0,39],_rZ=[1,_rY,_g],_s0=unCStr("\'\\\'\'"),_s1=function(_s2){var _s3=E(E(_s2)[1]);return _s3==39?E(_s0):[1,_rY,new T(function(){return _rO(_s3,_rZ);})];},_s4=unCStr("\\\""),_s5=function(_s6,_s7){var _s8=E(_s6);if(!_s8[0]){return E(_s7);}else{var _s9=_s8[2],_sa=E(E(_s8[1])[1]);return _sa==34?_2l(_s4,new T(function(){return _s5(_s9,_s7);})):_rO(_sa,new T(function(){return _s5(_s9,_s7);}));}},_sb=function(_sc,_sd){return [1,_E,new T(function(){return _s5(_sc,[1,_E,_sd]);})];},_se=function(_sf){return _2l(_s0,_sf);},_sg=function(_sh,_si){var _sj=E(E(_si)[1]);return _sj==39?E(_se):function(_sk){return [1,_rY,new T(function(){return _rO(_sj,[1,_rY,_sk]);})];};},_sl=[0,_sg,_s1,_sb],_sm=function(_sn){return E(E(_sn)[3]);},_so=function(_sp,_sq){return A(_sm,[_sp,_sq,_g]);},_sr=function(_ss,_st,_su){return _3b(new T(function(){return _sm(_ss);}),_st,_su);},_sv=function(_sw){var _sx=new T(function(){return _sm(_sw);});return [0,function(_sy){return E(_sx);},function(_sf){return _so(_sw,_sf);},function(_sz,_sf){return _sr(_sw,_sz,_sf);}];},_sA=new T(function(){return _sv(_sl);}),_sB=new T(function(){return _bd(_8s,_8t,_94,_sA,_qp);}),_sC=unCStr("text"),_sD=new T(function(){return A(_sB,[_9,_sC,_9]);}),_sE=unCStr("keydown"),_sF=unCStr("mousemove"),_sG=unCStr("blur"),_sH=unCStr("focus"),_sI=unCStr("change"),_sJ=unCStr("unload"),_sK=unCStr("load"),_sL=unCStr("keyup"),_sM=unCStr("keypress"),_sN=unCStr("mouseup"),_sO=unCStr("mousedown"),_sP=unCStr("dblclick"),_sQ=unCStr("click"),_sR=unCStr("mouseout"),_sS=unCStr("mouseover"),_sT=function(_sU){switch(E(_sU)[0]){case 0:return E(_sK);case 1:return E(_sJ);case 2:return E(_sI);case 3:return E(_sH);case 4:return E(_sG);case 5:return E(_sF);case 6:return E(_sS);case 7:return E(_sR);case 8:return E(_sQ);case 9:return E(_sP);case 10:return E(_sO);case 11:return E(_sN);case 12:return E(_sM);case 13:return E(_sL);default:return E(_sE);}},_sV=[0],_sW=unCStr("OnLoad"),_sX=[0,_sW,_sV],_sY=function(_){var _=0,_sZ=newMVar(),_=putMVar(_sZ,_sX);return [0,_sZ];},_t0=new T(function(){return _2(_sY);}),_t1=function(_t2,_t3,_){var _t4=A(_t2,[_]);return die(_t3);},_t5=function(_t6,_t7,_t8,_){return _t1(function(_){var _=putMVar(_t7,_t6);return _1f;},_t8,_);},_t9=function(_ta,_){var _tb=0;if(!E(_tb)){return (function(_){var _tc=E(_t0)[1],_td=takeMVar(_tc),_te=jsCatch(function(_){return (function(_){return _ta;})();},function(_1C,_){return _t5(_td,_tc,_1C,_);}),_=putMVar(_tc,_te);return _1f;})();}else{var _tf=E(_t0)[1],_tg=takeMVar(_tf),_th=jsCatch(function(_){return _ta;},function(_1C,_){return _t5(_tg,_tf,_1C,_);}),_=putMVar(_tf,_th);return _1f;}},_ti=unCStr("true"),_tj=function(_tk,_tl){while(1){var _tm=E(_tk);if(!_tm[0]){return E(_tl)[0]==0?true:false;}else{var _tn=E(_tl);if(!_tn[0]){return false;}else{if(E(_tm[1])[1]!=E(_tn[1])[1]){return false;}else{_tk=_tm[2];_tl=_tn[2];continue;}}}}},_to=new T(function(){return [0,"keydown"];}),_tp=new T(function(){return [0,"mousemove"];}),_tq=new T(function(){return [0,"blur"];}),_tr=new T(function(){return [0,"focus"];}),_ts=new T(function(){return [0,"change"];}),_tt=new T(function(){return [0,"unload"];}),_tu=new T(function(){return [0,"load"];}),_tv=new T(function(){return [0,"keyup"];}),_tw=new T(function(){return [0,"keypress"];}),_tx=new T(function(){return [0,"mouseup"];}),_ty=new T(function(){return [0,"mousedown"];}),_tz=new T(function(){return [0,"dblclick"];}),_tA=new T(function(){return [0,"click"];}),_tB=new T(function(){return [0,"mouseout"];}),_tC=new T(function(){return [0,"mouseover"];}),_tD=function(_tE){switch(E(_tE)[0]){case 0:return E(_tu);case 1:return E(_tt);case 2:return E(_ts);case 3:return E(_tr);case 4:return E(_tq);case 5:return E(_tp);case 6:return E(_tC);case 7:return E(_tB);case 8:return E(_tA);case 9:return E(_tz);case 10:return E(_ty);case 11:return E(_tx);case 12:return E(_tw);case 13:return E(_tv);default:return E(_to);}},_tF=function(_tG,_tH,_tI){var _tJ=new T(function(){return _sT(_tH);}),_tK=new T(function(){return _tD(_tH);});return function(_tL,_){var _tM=A(_tG,[_tL,_]),_tN=E(_tM),_tO=_tN[1],_tP=E(_tJ),_tQ=jsGetAttr(_tO,toJSStr(_tP));if(!_tj(fromJSStr(_tQ),_ti)){var _tR=E(_tI),_tS=jsSetCB(_tO,E(_tK)[1],E([0,_tI])[1]),_tT=A(_1g,[_1m,_tN,_tP,_ti,_]);return _tN;}else{return _tN;}};},_tU=function(_tV,_tW){var _tX=new T(function(){return _sT(_tW);}),_tY=[0,_tX,_sV];return function(_tZ,_){var _u0=E(_tZ),_u1=E(_u0[4]),_u2=_u1[1],_u3=_u1[2],_u4=A(_tV,[_u0,_]),_u5=E(_u4),_u6=E(_u5[1]),_u7=_u6[1];return [0,[0,new T(function(){var _u8=E(_tW);switch(_u8[0]){case 0:return _tF(_u7,_u8,function(_){var _u9=_t9(_tY,_),_ua=A(_u2,[_]),_ub=E(_ua);if(!_ub[0]){return _1f;}else{var _uc=A(_u3,[_ub[1],_]);return _1f;}});case 1:return _tF(_u7,_u8,function(_){var _ud=_t9(_tY,_),_ue=A(_u2,[_]),_uf=E(_ue);if(!_uf[0]){return _1f;}else{var _ug=A(_u3,[_uf[1],_]);return _1f;}});case 2:return _tF(_u7,_u8,function(_){var _uh=_t9(_tY,_),_ui=A(_u2,[_]),_uj=E(_ui);if(!_uj[0]){return _1f;}else{var _uk=A(_u3,[_uj[1],_]);return _1f;}});case 3:return _tF(_u7,_u8,function(_){var _ul=_t9(_tY,_),_um=A(_u2,[_]),_un=E(_um);if(!_un[0]){return _1f;}else{var _uo=A(_u3,[_un[1],_]);return _1f;}});case 4:return _tF(_u7,_u8,function(_){var _up=_t9(_tY,_),_uq=A(_u2,[_]),_ur=E(_uq);if(!_ur[0]){return _1f;}else{var _us=A(_u3,[_ur[1],_]);return _1f;}});case 5:return _tF(_u7,_u8,function(_ut,_){var _uu=_t9([0,_tX,[2,E(_ut)]],_),_uv=A(_u2,[_]),_uw=E(_uv);if(!_uw[0]){return _1f;}else{var _ux=A(_u3,[_uw[1],_]);return _1f;}});case 6:return _tF(_u7,_u8,function(_uy,_){var _uz=_t9([0,_tX,[2,E(_uy)]],_),_uA=A(_u2,[_]),_uB=E(_uA);if(!_uB[0]){return _1f;}else{var _uC=A(_u3,[_uB[1],_]);return _1f;}});case 7:return _tF(_u7,_u8,function(_){var _uD=A(_u2,[_]),_uE=E(_uD);if(!_uE[0]){return _1f;}else{var _uF=A(_u3,[_uE[1],_]);return _1f;}});case 8:return _tF(_u7,_u8,function(_uG,_uH,_){var _uI=_t9([0,_tX,[1,_uG,E(_uH)]],_),_uJ=A(_u2,[_]),_uK=E(_uJ);if(!_uK[0]){return _1f;}else{var _uL=A(_u3,[_uK[1],_]);return _1f;}});case 9:return _tF(_u7,_u8,function(_uM,_uN,_){var _uO=_t9([0,_tX,[1,_uM,E(_uN)]],_),_uP=A(_u2,[_]),_uQ=E(_uP);if(!_uQ[0]){return _1f;}else{var _uR=A(_u3,[_uQ[1],_]);return _1f;}});case 10:return _tF(_u7,_u8,function(_uS,_uT,_){var _uU=_t9([0,_tX,[1,_uS,E(_uT)]],_),_uV=A(_u2,[_]),_uW=E(_uV);if(!_uW[0]){return _1f;}else{var _uX=A(_u3,[_uW[1],_]);return _1f;}});case 11:return _tF(_u7,_u8,function(_uY,_uZ,_){var _v0=_t9([0,_tX,[1,_uY,E(_uZ)]],_),_v1=A(_u2,[_]),_v2=E(_v1);if(!_v2[0]){return _1f;}else{var _v3=A(_u3,[_v2[1],_]);return _1f;}});case 12:return _tF(_u7,_u8,function(_v4,_){var _v5=_t9([0,_tX,[3,_v4]],_),_v6=A(_u2,[_]),_v7=E(_v6);if(!_v7[0]){return _1f;}else{var _v8=A(_u3,[_v7[1],_]);return _1f;}});case 13:return _tF(_u7,_u8,function(_v9,_){var _va=_t9([0,_tX,[3,_v9]],_),_vb=A(_u2,[_]),_vc=E(_vb);if(!_vc[0]){return _1f;}else{var _vd=A(_u3,[_vc[1],_]);return _1f;}});default:return _tF(_u7,_u8,function(_ve,_){var _vf=_t9([0,_tX,[3,_ve]],_),_vg=A(_u2,[_]),_vh=E(_vg);if(!_vh[0]){return _1f;}else{var _vi=A(_u3,[_vh[1],_]);return _1f;}});}}),_u6[2]],_u5[2]];};},_vj=new T(function(){return _tU(_sD,_5s);}),_vk=function(_){var _vl=_13(_),_vm=E(_k)[1],_vn=takeMVar(_vm),_vo=_4S(_vj,_1b,_vn,_),_vp=E(_vo),_vq=E(_vp[1]),_vr=_vq[1],_vs=_vq[2],_=putMVar(_vm,new T(function(){var _vt=E(_vp[2]);return [0,_vt[1],_vt[2],_vt[3],_vt[4],_0,_vt[6]];}));if(!E(E(_vn)[5])){var _vu=A(_vr,[_vl,_]),_vv=E(_vs);if(!_vv[0]){return _3A(_5r,_);}else{var _vw=E(_vv[1]),_vx=jsAlert(toJSStr(_vw));return _vw;}}else{var _vy=A(_7,[E(E(_vl)[1]),_]),_vz=A(_vr,[[0,_vy],_]),_vA=E(_vs);if(!_vA[0]){return _3A(_5r,_);}else{var _vB=E(_vA[1]),_vC=jsAlert(toJSStr(_vB));return _vB;}}},_vD=unCStr("span"),_vE=function(_vF,_vG){var _vH=new T(function(){return A(_vF,[_vG]);});return function(_vI,_){var _vJ=jsCreateElem(toJSStr(E(_vD))),_vK=jsAppendChild(_vJ,E(_vI)[1]),_vL=[0,_vJ],_vM=A(_vH,[_vL,_]);return _vL;};},_vN=function(_){var _vO=_13(_),_vP=A(_vE,[_z,_L,_vO,_]),_vQ=_G(_vO,_),_vR=_vk(_),_vS=_13(_),_vT=A(_vE,[_z,[1,_E,new T(function(){return _s5(unAppCStr("hello",_vR),_K);})],_vS,_]),_vU=_G(_vS,_);return _vS;},_vV=unCStr("padding:15px;border-style:dotted"),_vW=unCStr("border-collapse:collapse"),_vX=unCStr("vertical-align:top"),_vY=[0,3],_vZ=[0,112],_w0=[1,_vZ,_g],_w1=function(_w2,_w3){var _w4=new T(function(){return A(_w2,[_w3]);});return function(_w5,_){var _w6=jsCreateElem(toJSStr(_w0)),_w7=jsAppendChild(_w6,E(_w5)[1]),_w8=[0,_w6],_w9=A(_w4,[_w8,_]);return _w8;};},_wa=function(_wb){return _4i(0,E(_wb)[1],_g);},_wc=[0,98],_wd=[1,_wc,_g],_we=function(_wf,_wg){var _wh=new T(function(){return A(_wf,[_wg]);});return function(_wi,_){var _wj=jsCreateElem(toJSStr(_wd)),_wk=jsAppendChild(_wj,E(_wi)[1]),_wl=[0,_wj],_wm=A(_wh,[_wl,_]);return _wl;};},_wn=[1,_1f],_wo=unCStr("result: "),_wp=function(_wq){var _wr=new T(function(){return _we(_z,new T(function(){return _wa(_wq);}));});return function(_ws,_){return [0,[0,function(_wt,_){var _wu=_G(_wt,_),_wv=_z(_wo,_wt,_),_ww=A(_wr,[_wt,_]);return _wt;},_wn],_ws];};},_wx=unCStr(" numbers and append the result using a fold"),_wy=[0,0],_wz=[1,_wy],_wA=[0,_Z,_wz],_wB=function(_wC,_){return [0,_wA,_wC];},_wD=function(_wE,_wF,_){var _wG=A(_wF,[_]);return _wE;},_wH=function(_wI,_wJ,_){var _wK=A(_wJ,[_]);return new T(function(){return A(_wI,[_wK]);});},_wL=[0,_wH,_wD],_wM=function(_wN){var _wO=E(_wN);return _wO[0]==0?0:E(_wO[1])[1]+_wM(_wO[2])|0;},_wP=function(_wQ){return [0,_wM(_wQ)];},_wR=function(_wS,_wT){return [0,E(_wS)[1]+E(_wT)[1]|0];},_wU=[0,_wy,_wR,_wP],_wV=function(_wW,_wX){var _wY=E(_wX);return _wY[0]==0?[0]:[1,new T(function(){return A(_wW,[_wY[1]]);})];},_wZ=function(_x0,_x1,_x2,_x3,_x4,_x5){var _x6=new T(function(){return _b5(_x0);});return A(_x1,[new T(function(){return A(_x3,[_x5]);}),function(_x7){var _x8=E(_x7),_x9=E(_x8[1]);return A(_x1,[new T(function(){return A(_x4,[_x8[2]]);}),function(_xa){var _xb=E(_xa),_xc=E(_xb[1]);return A(_x2,[[0,[0,new T(function(){return A(_x6,[_x9[1],_xc[1]]);}),new T(function(){var _xd=E(_x9[2]);if(!_xd[0]){return [0];}else{var _xe=E(_xc[2]);return _xe[0]==0?[0]:[1,new T(function(){return A(_xd[1],[_xe[1]]);})];}})],_xb[2]]]);}]);}]);},_xf=function(_xg){return E(E(_xg)[1]);},_xh=function(_xi,_xj,_xk,_xl,_xm,_xn){var _xo=new T(function(){return _8u(_xi);});return function(_xp){var _xq=E(_xj);return _wZ(_xo,_xq[1],_xq[3],function(_xr){return A(new T(function(){var _xs=new T(function(){return _b5(_xl);});return A(_xf,[_xk,function(_xt){return [0,new T(function(){var _xu=E(E(_xt)[1]);return [0,_xu[1],new T(function(){return _wV(_xs,_xu[2]);})];}),new T(function(){return E(E(_xt)[2]);})];}]);}),[new T(function(){return A(_xm,[_xr]);})]);},_xn,_xp);};},_xv=function(_xw,_xx){while(1){var _xy=(function(_xz,_xA){var _xB=E(_xA);if(!_xB[0]){return E(_xz);}else{_xw=new T(function(){return _xh(_8s,_3C,_wL,_wU,_xz,_xB[1]);});_xx=_xB[2];return null;}})(_xw,_xx);if(_xy!=null){return _xy;}}},_xC=[13,coercionToken],_xD=function(_xE,_xF,_xG){var _xH=function(_xI,_xJ){var _xK=new T(function(){return _or(function(_xL){return A(_xE,[_xL,_xI,function(_xM){return A(_xJ,[new T(function(){return [0, -E(_xM)[1]];})]);}]);});});return _d0(_oU(function(_xN){var _xO=E(_xN);if(_xO[0]==4){var _xP=E(_xO[1]);return _xP[0]==0?A(_xE,[_xO,_xI,_xJ]):E(E(_xP[1])[1])==45?E(_xP[2])[0]==0?E([1,function(_xQ){return A(_mI,[_xQ,function(_xR){return E(_xK);}]);}]):A(_xE,[_xO,_xI,_xJ]):A(_xE,[_xO,_xI,_xJ]);}else{return A(_xE,[_xO,_xI,_xJ]);}}),new T(function(){return _p0(_xH,_xJ);}));};return _xH(_xF,_xG);},_xS=function(_xT,_xU){return [2];},_xV=function(_qn,_q2){return _xS(_qn,_q2);},_xW=function(_xX){var _xY=E(_xX);return _xY[0]==0?[1,new T(function(){return _fx(new T(function(){return _lN(E(_xY[1])[1]);}),_fo,_xY[2]);})]:E(_xY[2])[0]==0?E(_xY[3])[0]==0?[1,new T(function(){return _fx(_fn,_fo,_xY[1]);})]:[0]:[0];},_xZ=function(_y0){var _y1=E(_y0);if(_y1[0]==5){var _y2=_xW(_y1[1]);if(!_y2[0]){return E(_xS);}else{var _y3=new T(function(){return [0,_gz(_y2[1])];});return function(_y4,_y5){return A(_y5,[_y3]);};}}else{return E(_xV);}},_y6=function(_qn,_q2){return _xD(_xZ,_qn,_q2);},_y7=function(_y8,_y9){return _pj(_y6,_y9);},_ya=new T(function(){return _pj(_y6,_e1);}),_yb=function(_q2){return _cQ(_ya,_q2);},_yc=function(_yd){var _ye=new T(function(){return _xD(_xZ,_yd,_e1);});return function(_ah){return _cQ(_ye,_ah);};},_yf=[0,_yc,_yb,_y6,_y7],_yg=function(_yh,_yi){return _4i(0,E(_yh)[1],_yi);},_yj=function(_yk,_yl){return _3b(_yg,_yk,_yl);},_ym=function(_yn,_yo,_yp){return _4i(E(_yn)[1],E(_yo)[1],_yp);},_yq=[0,_ym,_wa,_yj],_yr=unCStr("Int"),_ys=[0,I_fromBits([1521842780,3792221899]),I_fromBits([1346191152,3861967380]),_5B,_8T,_yr],_yt=[0,I_fromBits([1521842780,3792221899]),I_fromBits([1346191152,3861967380]),_ys,_g],_yu=function(_yv){return E(_yt);},_yw=new T(function(){return _bd(_8s,_8t,_yu,_yq,_yf);}),_yx=new T(function(){return A(_yw,[_9,_sC,_9]);}),_yy=new T(function(){return _tU(_yx,_xC);}),_yz=function(_yA,_){var _yB=A(_yy,[_yA,_]),_yC=E(_yB),_yD=E(_yC[1]);return [0,[0,function(_yE,_){var _yF=A(_yD[1],[_yE,_]),_yG=_G(_yE,_);return _yE;},_yD[2]],_yC[2]];},_yH=new T(function(){return [1,_yz,_yH];}),_yI=function(_yJ,_yK){var _yL=E(_yJ);if(!_yL){return [0];}else{var _yM=E(_yK);return _yM[0]==0?[0]:[1,_yM[1],new T(function(){return _yI(_yL-1|0,_yM[2]);})];}},_yN=function(_yO,_yP){return _yO<0?[0]:_yI(_yO,_yP);},_yQ=function(_yR,_yS){var _yT=E(_yR)[1];return _yT>0?_yN(_yT,_yS):[0];},_yU=function(_yV){var _yW=new T(function(){return _xv(_wB,_yQ(_yV,_yH));}),_yX=new T(function(){return _w1(_z,new T(function(){return unAppCStr("This widget sum ",new T(function(){return _2l(_4i(0,E(_yV)[1],_g),_wx);}));}));});return function(_yY,_){var _yZ=_4S(_yW,_wp,_yY,_),_z0=E(_yZ),_z1=E(_z0[1]),_z2=new T(function(){return _w1(_11,_z1[1]);});return [0,[0,function(_z3,_){var _z4=A(_yX,[_z3,_]),_z5=A(_z2,[_z3,_]);return _z3;},_z1[2]],_z0[2]];};},_z6=new T(function(){return _yU(_vY);}),_z7=unCStr("center"),_z8=function(_z9,_za){var _zb=new T(function(){return A(_z9,[_za]);});return function(_zc,_){var _zd=jsCreateElem(toJSStr(E(_z7))),_ze=jsAppendChild(_zd,E(_zc)[1]),_zf=[0,_zd],_zg=A(_zb,[_zf,_]);return _zf;};},_zh=function(_zi,_){return _zi;},_zj=unCStr("Two counters. One is pure and recursive, the other is stateful"),_zk=new T(function(){return _w1(_z,_zj);}),_zl=[8,coercionToken],_zm=unCStr("submit"),_zn=new T(function(){return A(_bd,[_8s,_8t,_94,_sA,_qp,_9,_zm]);}),_zo=[0,43],_zp=[1,_zo,_g],_zq=[1,_zp],_zr=new T(function(){return A(_zn,[_zq]);}),_zs=new T(function(){return _tU(_zr,_zl);}),_zt=function(_zu,_zv,_zw,_){var _zx=A(_zv,[_zw,_]),_zy=E(_zx),_zz=E(_zy[1]);return [0,[0,function(_zA,_){var _zB=_4B(_4A,_zA,_),_zC=A(_1g,[_1m,_zB,_1e,_zu,_]),_zD=A(_zz[1],[_zB,_]);return _zB;},_zz[2]],_zy[2]];},_zE=new T(function(){return _4n(_1I,_4a,_1G,_1D);}),_zF=new T(function(){return _4n(_1I,_4a,_1G,_1D);}),_zG=function(_zH,_zI,_zJ,_){var _zK=A(_zF,[_zJ,_]),_zL=A(_zE,[new T(function(){return E(E(_zK)[2]);}),_]),_zM=new T(function(){return E(E(_zK)[1]);});return _4S(function(_1C,_){return _zt(_zM,_zH,_1C,_);},function(_zN){var _zO=new T(function(){return A(_zI,[_zN]);});return function(_zP,_){var _zQ=A(_zO,[_zP,_]),_zR=E(_zQ),_zS=E(_zR[1]);return [0,[0,function(_zT,_){var _zU=E(_zM),_zV=jsFind(toJSStr(_zU)),_zW=E(_zV);if(!_zW[0]){return _4I(_zU);}else{var _zX=E(_zW[1]),_zY=A(_7,[E(_zX[1]),_]),_zZ=jsKillChild(E(_zX)[1],_zY),_A0=A(_zS[1],[_zT,_]);return _zT;}},_zS[2]],_zR[2]];};},new T(function(){return E(E(_zL)[2]);}),_);},_A1=function(_A2){var _A3=new T(function(){return _A1(new T(function(){return [0,E(_A2)[1]+1|0];}));}),_A4=new T(function(){return _we(_z,new T(function(){return _wa(_A2);}));});return function(_ah,_A5){return _zG(function(_A6,_){var _A7=A(_zs,[_A6,_]),_A8=E(_A7),_A9=E(_A8[1]);return [0,[0,function(_Aa,_){var _Ab=A(_A4,[_Aa,_]),_Ac=A(_A9[1],[_Aa,_]);return _Aa;},_A9[2]],_A8[2]];},function(_Ad){return E(_A3);},_ah,_A5);};},_Ae=unCStr("main"),_Af=unCStr("Main"),_Ag=unCStr("Counter"),_Ah=[0,I_fromBits([4029179641,2406453796]),I_fromBits([547056354,2957229436]),_Ae,_Af,_Ag],_Ai=function(_Aj,_Ak){var _Al=hs_leWord64(_Aj,_Ak);return E(_Al)==0?false:true;},_Am=function(_An,_Ao,_Ap,_Aq){var _Ar=hs_eqWord64(_An,_Ap);if(!E(_Ar)){var _As=hs_leWord64(_An,_Ap);return E(_As)==0?false:true;}else{return _Ai(_Ao,_Aq);}},_At=function(_Au,_Av){var _Aw=E(_Au),_Ax=_Aw[1],_Ay=_Aw[2],_Az=E(_Av),_AA=_Az[1],_AB=_Az[2],_AC=hs_eqWord64(_Ax,_AA);if(!E(_AC)){return !_Am(_Ax,_Ay,_AA,_AB)?2:0;}else{var _AD=hs_eqWord64(_Ay,_AB);return E(_AD)==0?!_Am(_Ax,_Ay,_AA,_AB)?2:0:1;}},_AE=unCStr("Failure in Data.Map.balanceL"),_AF=new T(function(){return err(_AE);}),_AG=function(_AH,_AI,_AJ,_AK){var _AL=E(_AK);if(!_AL[0]){var _AM=_AL[1],_AN=E(_AJ);if(!_AN[0]){var _AO=_AN[1],_AP=_AN[2],_AQ=_AN[3];if(_AO<=(imul(3,_AM)|0)){return [0,(1+_AO|0)+_AM|0,E(E(_AH)),_AI,E(_AN),E(_AL)];}else{var _AR=E(_AN[4]);if(!_AR[0]){var _AS=_AR[1],_AT=E(_AN[5]);if(!_AT[0]){var _AU=_AT[1],_AV=_AT[2],_AW=_AT[3],_AX=_AT[4];if(_AU>=(imul(2,_AS)|0)){var _AY=function(_AZ){var _B0=E(_AT[5]);return _B0[0]==0?[0,(1+_AO|0)+_AM|0,E(_AV),_AW,E([0,(1+_AS|0)+_AZ|0,E(_AP),_AQ,E(_AR),E(_AX)]),E([0,(1+_AM|0)+_B0[1]|0,E(E(_AH)),_AI,E(_B0),E(_AL)])]:[0,(1+_AO|0)+_AM|0,E(_AV),_AW,E([0,(1+_AS|0)+_AZ|0,E(_AP),_AQ,E(_AR),E(_AX)]),E([0,1+_AM|0,E(E(_AH)),_AI,E(_f),E(_AL)])];},_B1=E(_AX);return _B1[0]==0?_AY(_B1[1]):_AY(0);}else{return [0,(1+_AO|0)+_AM|0,E(_AP),_AQ,E(_AR),E([0,(1+_AM|0)+_AU|0,E(E(_AH)),_AI,E(_AT),E(_AL)])];}}else{return E(_AF);}}else{return E(_AF);}}}else{return [0,1+_AM|0,E(E(_AH)),_AI,E(_f),E(_AL)];}}else{var _B2=E(_AJ);if(!_B2[0]){var _B3=_B2[1],_B4=_B2[2],_B5=_B2[3],_B6=_B2[5],_B7=E(_B2[4]);if(!_B7[0]){var _B8=_B7[1],_B9=E(_B6);if(!_B9[0]){var _Ba=_B9[1],_Bb=_B9[2],_Bc=_B9[3],_Bd=_B9[4];if(_Ba>=(imul(2,_B8)|0)){var _Be=function(_Bf){var _Bg=E(_B9[5]);return _Bg[0]==0?[0,1+_B3|0,E(_Bb),_Bc,E([0,(1+_B8|0)+_Bf|0,E(_B4),_B5,E(_B7),E(_Bd)]),E([0,1+_Bg[1]|0,E(E(_AH)),_AI,E(_Bg),E(_f)])]:[0,1+_B3|0,E(_Bb),_Bc,E([0,(1+_B8|0)+_Bf|0,E(_B4),_B5,E(_B7),E(_Bd)]),E([0,1,E(E(_AH)),_AI,E(_f),E(_f)])];},_Bh=E(_Bd);return _Bh[0]==0?_Be(_Bh[1]):_Be(0);}else{return [0,1+_B3|0,E(_B4),_B5,E(_B7),E([0,1+_Ba|0,E(E(_AH)),_AI,E(_B9),E(_f)])];}}else{return [0,3,E(_B4),_B5,E(_B7),E([0,1,E(E(_AH)),_AI,E(_f),E(_f)])];}}else{var _Bi=E(_B6);return _Bi[0]==0?[0,3,E(_Bi[2]),_Bi[3],E([0,1,E(_B4),_B5,E(_f),E(_f)]),E([0,1,E(E(_AH)),_AI,E(_f),E(_f)])]:[0,2,E(E(_AH)),_AI,E(_B2),E(_f)];}}else{return [0,1,E(E(_AH)),_AI,E(_f),E(_f)];}}},_Bj=unCStr("Failure in Data.Map.balanceR"),_Bk=new T(function(){return err(_Bj);}),_Bl=function(_Bm,_Bn,_Bo,_Bp){var _Bq=E(_Bo);if(!_Bq[0]){var _Br=_Bq[1],_Bs=E(_Bp);if(!_Bs[0]){var _Bt=_Bs[1],_Bu=_Bs[2],_Bv=_Bs[3];if(_Bt<=(imul(3,_Br)|0)){return [0,(1+_Br|0)+_Bt|0,E(E(_Bm)),_Bn,E(_Bq),E(_Bs)];}else{var _Bw=E(_Bs[4]);if(!_Bw[0]){var _Bx=_Bw[1],_By=_Bw[2],_Bz=_Bw[3],_BA=_Bw[4],_BB=E(_Bs[5]);if(!_BB[0]){var _BC=_BB[1];if(_Bx>=(imul(2,_BC)|0)){var _BD=function(_BE){var _BF=E(_Bm),_BG=E(_Bw[5]);return _BG[0]==0?[0,(1+_Br|0)+_Bt|0,E(_By),_Bz,E([0,(1+_Br|0)+_BE|0,E(_BF),_Bn,E(_Bq),E(_BA)]),E([0,(1+_BC|0)+_BG[1]|0,E(_Bu),_Bv,E(_BG),E(_BB)])]:[0,(1+_Br|0)+_Bt|0,E(_By),_Bz,E([0,(1+_Br|0)+_BE|0,E(_BF),_Bn,E(_Bq),E(_BA)]),E([0,1+_BC|0,E(_Bu),_Bv,E(_f),E(_BB)])];},_BH=E(_BA);return _BH[0]==0?_BD(_BH[1]):_BD(0);}else{return [0,(1+_Br|0)+_Bt|0,E(_Bu),_Bv,E([0,(1+_Br|0)+_Bx|0,E(E(_Bm)),_Bn,E(_Bq),E(_Bw)]),E(_BB)];}}else{return E(_Bk);}}else{return E(_Bk);}}}else{return [0,1+_Br|0,E(E(_Bm)),_Bn,E(_Bq),E(_f)];}}else{var _BI=E(_Bp);if(!_BI[0]){var _BJ=_BI[1],_BK=_BI[2],_BL=_BI[3],_BM=_BI[5],_BN=E(_BI[4]);if(!_BN[0]){var _BO=_BN[1],_BP=_BN[2],_BQ=_BN[3],_BR=_BN[4],_BS=E(_BM);if(!_BS[0]){var _BT=_BS[1];if(_BO>=(imul(2,_BT)|0)){var _BU=function(_BV){var _BW=E(_Bm),_BX=E(_BN[5]);return _BX[0]==0?[0,1+_BJ|0,E(_BP),_BQ,E([0,1+_BV|0,E(_BW),_Bn,E(_f),E(_BR)]),E([0,(1+_BT|0)+_BX[1]|0,E(_BK),_BL,E(_BX),E(_BS)])]:[0,1+_BJ|0,E(_BP),_BQ,E([0,1+_BV|0,E(_BW),_Bn,E(_f),E(_BR)]),E([0,1+_BT|0,E(_BK),_BL,E(_f),E(_BS)])];},_BY=E(_BR);return _BY[0]==0?_BU(_BY[1]):_BU(0);}else{return [0,1+_BJ|0,E(_BK),_BL,E([0,1+_BO|0,E(E(_Bm)),_Bn,E(_f),E(_BN)]),E(_BS)];}}else{return [0,3,E(_BP),_BQ,E([0,1,E(E(_Bm)),_Bn,E(_f),E(_f)]),E([0,1,E(_BK),_BL,E(_f),E(_f)])];}}else{var _BZ=E(_BM);return _BZ[0]==0?[0,3,E(_BK),_BL,E([0,1,E(E(_Bm)),_Bn,E(_f),E(_f)]),E(_BZ)]:[0,2,E(E(_Bm)),_Bn,E(_f),E(_BI)];}}else{return [0,1,E(E(_Bm)),_Bn,E(_f),E(_f)];}}},_C0=function(_C1,_C2,_C3,_C4,_C5,_C6){var _C7=E(_C6);if(!_C7[0]){var _C8=_C7[2],_C9=_C7[3],_Ca=_C7[4],_Cb=_C7[5];switch(_At([0,_C1,_C2,_C3,_C4],_C8)){case 0:return _AG(_C8,_C9,_C0(_C1,_C2,_C3,_C4,_C5,_Ca),_Cb);case 1:return [0,_C7[1],E([0,_C1,_C2,_C3,_C4]),_C5,E(_Ca),E(_Cb)];default:return _Bl(_C8,_C9,_Ca,_C0(_C1,_C2,_C3,_C4,_C5,_Cb));}}else{return [0,1,E([0,_C1,_C2,_C3,_C4]),_C5,E(_f),E(_f)];}},_Cc=[0,_Z,_wn],_Cd=function(_Ce,_){return [0,[0,_Z,[1,_Ce]],_Ce];},_Cf=[1,_1f],_Cg=function(_Ch){var _Ci=new T(function(){return [0,E(_Ch)[1]+1|0];}),_Cj=new T(function(){return _we(_z,new T(function(){return _wa(_Ch);}));});return function(_ah,_A5){return _4S(function(_Ck,_){return [0,[0,_Cj,_Cf],_Ck];},function(_Cl,_Cm,_){return (function(_Cm,_){return _4S(_Cd,function(_Cn){return function(_Co,_){return [0,_Cc,new T(function(){var _Cp=E(_Cn);return [0,_Cp[1],_Cp[2],_Cp[3],_Cp[4],_Cp[5],new T(function(){return _C0(I_fromBits([4029179641,2406453796]),I_fromBits([547056354,2957229436]),_Ah,_g,_Ci,_Cp[6]);})];})];};},_Cm,_);})(_Cm,_);},_ah,_A5);};},_Cq=[0,I_fromBits([4029179641,2406453796]),I_fromBits([547056354,2957229436]),_Ah,_g],_Cr=function(_Cs){return E(_Cq);},_Ct=function(_Cu,_Cv,_Cw,_Cx,_Cy){while(1){var _Cz=E(_Cy);if(!_Cz[0]){switch(_At([0,_Cu,_Cv,_Cw,_Cx],_Cz[2])){case 0:_Cy=_Cz[4];continue;case 1:return [1,_Cz[3]];default:_Cy=_Cz[5];continue;}}else{return [0];}}},_CA=function(_CB,_CC){var _CD=E(_CB),_CE=_CD[1],_CF=_CD[2],_CG=_CD[3],_CH=_CD[4],_CI=E(_CC);if(!_CI[0]){switch(_At(_CD,_CI[2])){case 0:return _Ct(_CE,_CF,_CG,_CH,_CI[4]);case 1:return [1,_CI[3]];default:return _Ct(_CE,_CF,_CG,_CH,_CI[5]);}}else{return [0];}},_CJ=function(_CK,_CL,_CM,_CN){var _CO=E(_CL),_CP=_CO[1],_CQ=_CO[3],_CR=new T(function(){return A(_CN,[_8P]);}),_CS=new T(function(){return A(_CQ,[_9]);});return A(_CP,[new T(function(){return A(_CP,[_CM,function(_CT){return A(_CQ,[new T(function(){var _CU=E(_CK);return E(E(_CT)[6]);})]);}]);}),function(_CV){var _CW=_CA(_CR,_CV);return _CW[0]==0?E(_CS):A(_CQ,[[1,_CW[1]]]);}]);},_CX=new T(function(){return _CJ(_1I,_4a,_1G,_Cr);}),_CY=function(_CZ){var _D0=new T(function(){return _A1(_CZ);});return function(_D1,_){var _D2=A(_D0,[_D1,_]),_D3=E(_D2),_D4=E(_D3[1]),_D5=_4S(_zs,function(_D6){return function(_Cm,_){return _4S(function(_D7,_){var _D8=A(_CX,[_D7,_]);return [0,[0,_zh,new T(function(){var _D9=E(E(_D8)[1]);return _D9[0]==0?E([1,_CZ]):E(_D9);})],new T(function(){return E(E(_D8)[2]);})];},_Cg,_Cm,_);};},_D3[2],_),_Da=E(_D5),_Db=E(_Da[1]),_Dc=new T(function(){return _z8(_11,function(_Dd,_){var _De=A(_D4[1],[_Dd,_]),_Df=A(_Db[1],[_Dd,_]);return _Dd;});});return [0,[0,function(_Dg,_){var _Dh=A(_zk,[_Dg,_]),_Di=_G(_Dg,_),_Dj=A(_Dc,[_Dg,_]);return _Dg;},new T(function(){var _Dk=E(_D4[2]);return _Dk[0]==0?E(_Db[2]):E(_Dk);})],_Da[2]];};},_Dl=new T(function(){return _CY(_vY);}),_Dm=[0,4],_Dn=function(_Do,_Dp){return [1,_Dp,new T(function(){return _Dn(_Do,new T(function(){return A(_Do,[_Dp]);}));})];},_Dq=[0,1],_Dr=[1,_Dq,_g],_Ds=[1,_wy,_g],_Dt=function(_Du,_Dv,_Dw){var _Dx=E(_Dv);if(!_Dx[0]){return [0];}else{var _Dy=E(_Dw);return _Dy[0]==0?[0]:[1,new T(function(){return A(_Du,[_Dx[1],_Dy[1]]);}),new T(function(){return _Dt(_Du,_Dx[2],_Dy[2]);})];}},_Dz=function(_DA){return _Dt(_wR,[1,_wy,_DA],new T(function(){return _2l(_DA,_Ds);}));},_DB=new T(function(){return _Dn(_Dz,_Dr);}),_DC=unCStr(" rows of the Pascal triangle "),_DD=function(_DE){var _DF=new T(function(){return _3b(_yg,_DE,_g);});return function(_ah,_A5){return _z(_DF,_ah,_A5);};},_DG=unCStr("text-align:center"),_DH=unCStr("style"),_DI=function(_DJ,_DK){var _DL=new T(function(){return _w1(_DD,_DJ);});return [1,function(_DM,_){var _DN=A(_DL,[_DM,_]),_DO=A(_1g,[_1m,_DN,_DH,_DG,_]);return _DN;},_DK];},_DP=function(_DQ,_DR){var _DS=E(_DQ);if(!_DS[0]){return [0];}else{var _DT=_DS[1];return _DR>1?_DI(_DT,new T(function(){return _DP(_DS[2],_DR-1|0);})):_DI(_DT,_g);}},_DU=function(_DV){var _DW=new T(function(){return _w1(_z,new T(function(){return unAppCStr("Show ",new T(function(){return _2l(_4i(0,E(_DV)[1],_g),_DC);}));}));});return function(_DX,_){return [0,[0,function(_DY,_){var _DZ=A(_DW,[_DY,_]),_E0=_8f(new T(function(){var _E1=E(_DV)[1];return _E1>0?_DP(_DB,_E1):[0];}),_DY,_);return _DY;},_9],_DX];};},_E2=new T(function(){return _DU(_Dm);}),_E3=unCStr("Different input elements:"),_E4=new T(function(){return _w1(_z,_E3);}),_E5=unCStr(" returns: "),_E6=function(_E7){var _E8=new T(function(){return _we(_z,[1,_E,new T(function(){return _s5(_E7,_K);})]);});return function(_E9,_){return [0,[0,function(_Ea,_){var _Eb=_z(_E5,_Ea,_),_Ec=A(_E8,[_Ea,_]);return _Ea;},_Cf],_E9];};},_Ed=unCStr("blue"),_Ee=[1,_Ed,_g],_Ef=unCStr("green"),_Eg=[1,_Ef,_Ee],_Eh=unCStr("red"),_Ei=[1,_Eh,_Eg],_Ej=function(_Ek){return E(E(_Ek)[15]);},_El=function(_Em,_En,_){var _Eo=jsGet(_Em,toJSStr(E(_En)));return new T(function(){return fromJSStr(_Eo);});},_Ep=function(_Eq,_Er,_){return _El(E(_Eq)[1],_Er,_);},_Es=unCStr("radio"),_Et=new T(function(){return A(_94,[_6u]);}),_Eu=unCStr("name"),_Ev=unCStr("true"),_Ew=function(_Ex,_Ey,_Ez,_EA){var _EB=new T(function(){return _8w(_Ey);}),_EC=new T(function(){return _4n([0,coercionToken],_45(_EB),function(_ED){return _b2(_EB,_ED);},function(_EE,_EF){return _b7(_EB,_EE,_EF);});}),_EG=new T(function(){return _43(_EB);}),_EH=new T(function(){return _43(_EB);}),_EI=new T(function(){return _3D(_EB);}),_EJ=new T(function(){return _3D(_EB);}),_EK=new T(function(){return _43(_EB);}),_EL=new T(function(){return _3D(_EB);}),_EM=new T(function(){return _43(_EB);}),_EN=new T(function(){return _3D(_EB);}),_EO=new T(function(){return _b0(_Ex);}),_EP=new T(function(){return _Ej(_Ex);}),_EQ=new T(function(){return _bb(_EA);});return function(_ER,_ES){return function(_ET){return A(_EI,[new T(function(){return A(_EC,[_ET]);}),function(_EU){var _EV=new T(function(){return E(E(_EU)[1]);}),_EW=new T(function(){return _8A(_Ey,function(_){return jsFind(toJSStr(E(_EV)));});});return A(_EN,[new T(function(){var _EX=new T(function(){return E(E(_EU)[2]);});return A(_EM,[[0,_EX,_EX]]);}),function(_EY){return A(_EL,[new T(function(){return A(_EK,[[0,_1f,new T(function(){var _EZ=E(E(_EY)[1]);return [0,_EZ[1],_EZ[2],_aZ,_EZ[4],_EZ[5],_EZ[6]];})]]);}),function(_F0){return A(_EJ,[new T(function(){return A(_EW,[new T(function(){return E(E(_F0)[2]);})]);}),function(_F1){return A(_EI,[new T(function(){var _F2=E(_F1),_F3=_F2[2],_F4=E(_F2[1]);return _F4[0]==0?A(_EH,[[0,_g,_F3]]):A(_8A,[_Ey,function(_){return _Ep(_F4[1],_6I,_);},_F3]);}),function(_F5){var _F6=new T(function(){return !_tj(E(_F5)[1],_Ev)?[0]:E([1,_ER]);});return A(_EG,[[0,[0,new T(function(){return A(_EP,[new T(function(){return A(_EO,[_EV,_Es,new T(function(){var _F7=A(_Ez,[_ER]),_F8=E(_Et),_F9=hs_eqWord64(_F7[1],_F8[1]);if(!E(_F9)){return A(_EQ,[_ER]);}else{var _Fa=hs_eqWord64(_F7[2],_F8[2]);return E(_Fa)==0?A(_EQ,[_ER]):E(_ER);}}),new T(function(){return E(_F6)[0]==0?false:true;}),_9]);}),[1,[0,_Eu,_ES],_g]]);}),new T(function(){var _Fb=E(_F6);return _Fb[0]==0?[0]:[1,_Fb[1]];})],new T(function(){return E(E(_F5)[2]);})]]);}]);}]);}]);}]);}]);};};},_Fc=new T(function(){return _6v(_8X,_92);}),_Fd=new T(function(){return _sv(_sl);}),_Fe=new T(function(){return _Ew(_8s,_8t,_Fc,_Fd);}),_Ff=function(_Fg){var _Fh=E(_Fg);if(!_Fh[0]){return [0];}else{var _Fi=_Fh[1];return [1,function(_Fj){var _Fk=new T(function(){return _tU(new T(function(){return A(_Fe,[_Fi,_Fj]);}),_zl);});return function(_Fl,_){var _Fm=A(_Fk,[_Fl,_]),_Fn=E(_Fm),_Fo=E(_Fn[1]);return [0,[0,function(_Fp,_){var _Fq=_z(_Fi,_Fp,_),_Fr=A(_Fo[1],[_Fp,_]);return _Fp;},_Fo[2]],_Fn[2]];};},new T(function(){return _Ff(_Fh[2]);})];}},_Fs=new T(function(){return _Ff(_Ei);}),_Ft=function(_Fu){return E(E(_Fu)[1]);},_Fv=function(_Fw,_Fx){var _Fy=new T(function(){return _8u(_Fx);}),_Fz=new T(function(){return _Ft(_Fy);}),_FA=new T(function(){return _b5(_Fy);}),_FB=function(_FC){var _FD=E(_FC);if(!_FD[0]){return [0,_Fz,_9];}else{var _FE=E(_FD[1]),_FF=_FB(_FD[2]);return [0,new T(function(){return A(_FA,[_FE[1],_FF[1]]);}),new T(function(){var _FG=E(_FE[2]);return _FG[0]==0?E(_FF[2]):E(_FG);})];}},_FH=new T(function(){return _43(_Fw);}),_FI=new T(function(){return _4n([0,coercionToken],_45(_Fw),function(_FJ){return _b2(_Fw,_FJ);},function(_FK,_FL){return _b7(_Fw,_FK,_FL);});}),_FM=new T(function(){return _43(_Fw);}),_FN=new T(function(){return _3D(_Fw);}),_FO=new T(function(){return _3D(_Fw);}),_FP=new T(function(){return _3D(_Fw);}),_FQ=new T(function(){return _3D(_Fw);});return function(_FR,_FS){return A(_FQ,[new T(function(){return A(_FI,[_FS]);}),function(_FT){return A(_FP,[new T(function(){var _FU=new T(function(){return E(E(_FT)[1]);}),_FV=function(_FW){var _FX=E(_FW);if(!_FX[0]){return function(_FY){return A(_FM,[[0,_g,_FY]]);};}else{var _FZ=new T(function(){return _FV(_FX[2]);}),_G0=new T(function(){return A(_FX[1],[_FU]);});return function(_G1){return A(_FO,[new T(function(){return A(_G0,[_G1]);}),function(_G2){var _G3=new T(function(){return E(E(_G2)[1]);});return A(_FN,[new T(function(){return A(_FZ,[new T(function(){return E(E(_G2)[2]);})]);}),function(_G4){return A(_FM,[[0,[1,_G3,new T(function(){return E(E(_G4)[1]);})],new T(function(){return E(E(_G4)[2]);})]]);}]);}]);};}};return A(_FV,[_FR,new T(function(){return E(E(_FT)[2]);})]);}),function(_G5){var _G6=new T(function(){var _G7=_FB(E(_G5)[1]);return [0,_G7[1],_G7[2]];});return A(_FH,[[0,[0,new T(function(){return E(E(_G6)[1]);}),new T(function(){var _G8=E(E(_G6)[2]);return _G8[0]==0?[0]:[1,_G8[1]];})],new T(function(){return E(E(_G5)[2]);})]]);}]);}]);};},_G9=new T(function(){return _Fv(_3C,_8s);}),_Ga=new T(function(){return A(_G9,[_Fs]);}),_Gb=function(_Gc){var _Gd=new T(function(){return _we(_z,new T(function(){return _3b(_sb,_Gc,_g);}));});return function(_Ge,_){return [0,[0,function(_Gf,_){var _Gg=_z(_E5,_Gf,_),_Gh=A(_Gd,[_Gf,_]);return _Gf;},_Cf],_Ge];};},_Gi=new T(function(){return _we(_z,_Ef);}),_Gj=unCStr("checkbox"),_Gk=function(_Gl,_Gm){var _Gn=new T(function(){return _8w(_Gm);}),_Go=new T(function(){return _4n([0,coercionToken],_45(_Gn),function(_Gp){return _b2(_Gn,_Gp);},function(_Gq,_Gr){return _b7(_Gn,_Gq,_Gr);});}),_Gs=new T(function(){return _43(_Gn);}),_Gt=new T(function(){return _43(_Gn);}),_Gu=new T(function(){return _3D(_Gn);}),_Gv=new T(function(){return _3D(_Gn);}),_Gw=new T(function(){return _43(_Gn);}),_Gx=new T(function(){return _3D(_Gn);}),_Gy=new T(function(){return _43(_Gn);}),_Gz=new T(function(){return _3D(_Gn);}),_GA=new T(function(){return _b0(_Gl);});return function(_GB,_GC){var _GD=new T(function(){return !E(_GB)?[0]:E(_Ev);});return function(_GE){return A(_Gu,[new T(function(){return A(_Go,[_GE]);}),function(_GF){var _GG=new T(function(){return E(E(_GF)[1]);}),_GH=new T(function(){return _8A(_Gm,function(_){return jsFind(toJSStr(E(_GG)));});}),_GI=new T(function(){return A(_GA,[_GG,_Gj,_GC,_GB,_9]);});return A(_Gz,[new T(function(){var _GJ=new T(function(){return E(E(_GF)[2]);});return A(_Gy,[[0,_GJ,_GJ]]);}),function(_GK){return A(_Gx,[new T(function(){return A(_Gw,[[0,_1f,new T(function(){var _GL=E(E(_GK)[1]);return [0,_GL[1],_GL[2],_aZ,_GL[4],_GL[5],_GL[6]];})]]);}),function(_GM){return A(_Gv,[new T(function(){return A(_GH,[new T(function(){return E(E(_GM)[2]);})]);}),function(_GN){return A(_Gu,[new T(function(){var _GO=E(_GN),_GP=_GO[2],_GQ=E(_GO[1]);return _GQ[0]==0?A(_Gt,[[0,_GD,_GP]]):A(_8A,[_Gm,function(_){return _Ep(_GQ[1],_6I,_);},_GP]);}),function(_GR){return A(_Gs,[[0,[0,_GI,[1,[0,new T(function(){return !_tj(E(_GR)[1],_Ev)?[0]:E([1,_GC,_g]);})]]],new T(function(){return E(E(_GR)[2]);})]]);}]);}]);}]);}]);}]);};};},_GS=new T(function(){return _Gk(_8s,_8t);}),_GT=unCStr("Green"),_GU=new T(function(){return A(_GS,[_0,_GT]);}),_GV=function(_GW,_){var _GX=A(_GU,[_GW,_]),_GY=E(_GX),_GZ=E(_GY[1]);return [0,[0,function(_H0,_){var _H1=A(_GZ[1],[_H0,_]),_H2=A(_Gi,[_H0,_]);return _H0;},_GZ[2]],_GY[2]];},_H3=new T(function(){return _tU(_GV,_zl);}),_H4=new T(function(){return _we(_z,_Ed);}),_H5=new T(function(){return A(_GS,[_0,_Ed]);}),_H6=function(_H7,_){var _H8=A(_H5,[_H7,_]),_H9=E(_H8),_Ha=E(_H9[1]);return [0,[0,function(_Hb,_){var _Hc=A(_Ha[1],[_Hb,_]),_Hd=A(_H4,[_Hb,_]);return _Hb;},_Ha[2]],_H9[2]];},_He=new T(function(){return _tU(_H6,_zl);}),_Hf=new T(function(){return _we(_z,_Eh);}),_Hg=unCStr("Red"),_Hh=new T(function(){return A(_GS,[_0,_Hg]);}),_Hi=function(_Hj,_){var _Hk=A(_Hh,[_Hj,_]),_Hl=E(_Hk),_Hm=E(_Hl[1]);return [0,[0,function(_Hn,_){var _Ho=A(_Hm[1],[_Hn,_]),_Hp=A(_Hf,[_Hn,_]);return _Hn;},_Hm[2]],_Hl[2]];},_Hq=new T(function(){return _tU(_Hi,_zl);}),_Hr=function(_Hs,_){var _Ht=A(_Hq,[_Hs,_]),_Hu=E(_Ht),_Hv=E(_Hu[1]),_Hw=A(_H3,[_Hu[2],_]),_Hx=E(_Hw),_Hy=E(_Hx[1]),_Hz=A(_He,[_Hx[2],_]),_HA=E(_Hz),_HB=E(_HA[1]);return [0,[0,function(_HC,_){var _HD=A(_Hv[1],[_HC,_]),_HE=A(_Hy[1],[_HC,_]),_HF=A(_HB[1],[_HC,_]);return _HC;},new T(function(){var _HG=E(_Hv[2]);if(!_HG[0]){return [0];}else{var _HH=E(_Hy[2]);if(!_HH[0]){return [0];}else{var _HI=E(_HB[2]);return _HI[0]==0?[0]:[1,new T(function(){var _HJ=function(_HK){var _HL=E(_HK);return _HL[0]==0?E(new T(function(){var _HM=function(_HN){var _HO=E(_HN);return _HO[0]==0?E(E(_HI[1])[1]):[1,_HO[1],new T(function(){return _HM(_HO[2]);})];};return _HM(E(_HH[1])[1]);})):[1,_HL[1],new T(function(){return _HJ(_HL[2]);})];};return _HJ(E(_HG[1])[1]);})];}}})],_HA[2]];},_HP=function(_HQ){var _HR=new T(function(){return _we(_z,[1,_E,new T(function(){return _s5(_HQ,_K);})]);});return function(_HS,_){return [0,[0,function(_HT,_){var _HU=_z(_E5,_HT,_),_HV=A(_HR,[_HT,_]);return _HT;},_Cf],_HS];};},_HW=new T(function(){return _ql(_q7);}),_HX=function(_HY){return E(E(_HY)[11]);},_HZ=function(_I0,_I1,_I2,_I3){var _I4=new T(function(){return _8w(_I1);}),_I5=new T(function(){return _45(_I4);}),_I6=new T(function(){return _4n([0,coercionToken],_I5,function(_I7){return _b2(_I4,_I7);},function(_I8,_I9){return _b7(_I4,_I8,_I9);});}),_Ia=new T(function(){return _43(_I4);}),_Ib=new T(function(){return _3D(_I4);}),_Ic=new T(function(){return _3D(_I4);}),_Id=new T(function(){return _43(_I4);}),_Ie=new T(function(){return _3D(_I4);}),_If=new T(function(){return _43(_I4);}),_Ig=new T(function(){return _3D(_I4);}),_Ih=new T(function(){return _3D(_I4);}),_Ii=new T(function(){return _HX(_I0);});return function(_Ij,_Ik){return A(_Ih,[new T(function(){return A(_I6,[_Ik]);}),function(_Il){var _Im=new T(function(){return E(E(_Il)[1]);}),_In=new T(function(){return _ax(_I5,function(_Io){return _8A(_I1,_Io);},_I2,_I3,_I0,_Im);});return A(_Ig,[new T(function(){var _Ip=new T(function(){return E(E(_Il)[2]);});return A(_If,[[0,_Ip,_Ip]]);}),function(_Iq){return A(_Ie,[new T(function(){return A(_Id,[[0,_1f,new T(function(){var _Ir=E(E(_Iq)[1]);return [0,_Ir[1],_Ir[2],_aZ,_Ir[4],_Ir[5],_Ir[6]];})]]);}),function(_Is){return A(_Ic,[new T(function(){return A(_In,[new T(function(){return E(E(_Is)[2]);})]);}),function(_It){return A(_Ib,[new T(function(){return A(_Ij,[new T(function(){return E(E(_It)[2]);})]);}),function(_Iu){var _Iv=E(_Iu);return A(_Ia,[[0,[0,new T(function(){return A(_Ii,[_Im,E(_Iv[1])[1]]);}),new T(function(){var _Iw=E(E(_It)[1]);return _Iw[0]==2?[1,_Iw[1]]:[0];})],_Iv[2]]]);}]);}]);}]);}]);}]);};},_Ix=new T(function(){return _HZ(_8s,_8t,_Fc,_HW);}),_Iy=new T(function(){return _s5(_Ed,_K);}),_Iz=new T(function(){return _s5(_Ed,_K);}),_IA=new T(function(){return A(_94,[_6u]);}),_IB=new T(function(){var _IC=A(_Fc,[_Ed]),_ID=E(_IA),_IE=hs_eqWord64(_IC[1],_ID[1]);if(!E(_IE)){return [1,_E,_Iy];}else{var _IF=hs_eqWord64(_IC[2],_ID[2]);return E(_IF)==0?[1,_E,_Iz]:E(_Ed);}}),_IG=[0,_6G,_IB],_IH=[1,_IG,_g],_II=new T(function(){return _1v(_7d,_IH);}),_IJ=new T(function(){return _s5(_Ef,_K);}),_IK=new T(function(){return _s5(_Ef,_K);}),_IL=new T(function(){var _IM=A(_Fc,[_Ef]),_IN=E(_IA),_IO=hs_eqWord64(_IM[1],_IN[1]);if(!E(_IO)){return [1,_E,_IJ];}else{var _IP=hs_eqWord64(_IM[2],_IN[2]);return E(_IP)==0?[1,_E,_IK]:E(_Ef);}}),_IQ=[0,_6G,_IL],_IR=[1,_IQ,_g],_IS=new T(function(){return _1v(_7d,_IR);}),_IT=new T(function(){return _s5(_Eh,_K);}),_IU=new T(function(){return _s5(_Eh,_K);}),_IV=new T(function(){var _IW=A(_Fc,[_Eh]),_IX=E(_IA),_IY=hs_eqWord64(_IW[1],_IX[1]);if(!E(_IY)){return [1,_E,_IT];}else{var _IZ=hs_eqWord64(_IW[2],_IX[2]);return E(_IZ)==0?[1,_E,_IU]:E(_Eh);}}),_J0=[0,_6G,_IV],_J1=[1,_J0,_g],_J2=new T(function(){return _1v(_7d,_J1);}),_J3=function(_J4,_){var _J5=A(_J2,[_J4,_]),_J6=_z(_Eh,_J5,_),_J7=A(_IS,[_J4,_]),_J8=_z(_Ef,_J7,_),_J9=A(_II,[_J4,_]),_Ja=_z(_Ed,_J9,_);return _J4;},_Jb=[1,_Eh],_Jc=[0,_J3,_Jb],_Jd=function(_Je,_){return [0,_Jc,_Je];},_Jf=new T(function(){return A(_Ix,[_Jd]);}),_Jg=new T(function(){return _tU(_Jf,_zl);}),_Jh=function(_Ji,_){var _Jj=_4S(_Hr,_Gb,_Ji,_),_Jk=E(_Jj),_Jl=_4S(_Ga,_E6,_Jk[2],_),_Jm=E(_Jl),_Jn=_4S(_Jg,_HP,_Jm[2],_),_Jo=E(_Jn),_Jp=E(_Jo[1]);return [0,[0,function(_Jq,_){var _Jr=A(_E4,[_Jq,_]),_Js=A(E(_Jk[1])[1],[_Jq,_]),_Jt=_G(_Jq,_),_Ju=_G(_Jq,_),_Jv=A(E(_Jm[1])[1],[_Jq,_]),_Jw=_G(_Jq,_),_Jx=_G(_Jq,_),_Jy=A(_Jp[1],[_Jq,_]),_Jz=_G(_Jq,_);return _Jq;},_Jp[2]],_Jo[2]];},_JA=unCStr("This example draw a function of x between 10 and -10. You can define the function using javascript expressions"),_JB=new T(function(){return _w1(_z,_JA);}),_JC=function(_JD){var _JE=jsShow(E(_JD)[1]);return fromJSStr(_JE);},_JF=function(_JG){var _JH=new T(function(){return _JC(_JG);});return function(_ah){return _2l(_JH,_ah);};},_JI=function(_JJ,_JK,_JL){var _JM=E(_JL);if(!_JM[0]){return [0];}else{var _JN=_JM[2],_JO=E(_JM[1]);return _JJ!=_JO[1]?[1,_JO,new T(function(){return _JI(_JJ,_JK,_JN);})]:_2l(_JK,new T(function(){return _JI(_JJ,_JK,_JN);}));}},_JP=[0,45],_JQ=function(_JR,_JS,_JT){var _JU=new T(function(){return A(_JR,[[0, -_JT]]);}),_JV=new T(function(){return E(_JS)[1]<=6?function(_JW){return [1,_JP,new T(function(){return A(_JU,[_JW]);})];}:function(_JX){return [1,_4h,[1,_JP,new T(function(){return A(_JU,[[1,_4g,_JX]]);})]];};});if(_JT>=0){var _JY=isDoubleNegativeZero(_JT);return E(_JY)==0?A(_JR,[[0,_JT]]):E(_JV);}else{return E(_JV);}},_JZ=unCStr("canvas"),_K0=unCStr("id"),_K1=unCStr("canvas"),_K2=function(_K3,_K4){var _K5=new T(function(){return A(_K3,[_K4]);});return function(_K6,_){var _K7=jsCreateElem(toJSStr(E(_K1))),_K8=jsAppendChild(_K7,E(_K6)[1]),_K9=[0,_K7],_Ka=A(_K5,[_K9,_]);return _K9;};},_Kb=new T(function(){return _K2(_11,_Z);}),_Kc=function(_Kd,_){var _Ke=A(_Kb,[_Kd,_]),_Kf=A(_1g,[_1m,_Ke,_K0,_JZ,_]);return _Ke;},_Kg=[0,_Kc,_Cf],_Kh=function(_Ki,_){return [0,_Kg,_Ki];},_Kj=unCStr("Pattern match failure in do expression at main.hs:190:5-12"),_Kk=function(_Kl,_Km){while(1){var _Kn=E(_Km);if(!_Kn[0]){return false;}else{if(!A(_Kl,[_Kn[1]])){_Km=_Kn[2];continue;}else{return true;}}}},_Ko=unCStr("x*x+x+10;"),_Kp=new T(function(){return [0,"(function(exp){ return eval(exp);})"];}),_Kq=new T(function(){return _5(_Kp);}),_Kr=function(_Ks,_){var _Kt=jsHasCtx2D(_Ks);if(!E(_Kt)){return _9;}else{var _Ku=jsGetCtx2D(_Ks);return [1,[0,[0,_Ku],[0,_Ks]]];}},_Kv=function(_Kw,_){return _Kr(E(_Kw)[1],_);},_Kx=function(_Ky,_Kz){return A(_Ky,[function(_){var _KA=jsFind(toJSStr(E(_Kz))),_KB=E(_KA);return _KB[0]==0?_9:_Kv(_KB[1],_);}]);},_KC=new T(function(){return _Kx(_1m,_JZ);}),_KD=[0,-10],_KE=[0,0],_KF=[0,_KD,_KE],_KG=[0,10],_KH=[0,_KG,_KE],_KI=[1,_KH,_g],_KJ=[1,_KF,_KI],_KK=function(_KL,_){return _1f;},_KM=function(_KN){var _KO=E(_KN);if(!_KO[0]){return E(_KK);}else{var _KP=E(_KO[1]);return function(_KQ,_){var _KR=E(_KQ)[1],_KS=jsMoveTo(_KR,E(_KP[1])[1],E(_KP[2])[1]);return (function(_KT,_){while(1){var _KU=E(_KT);if(!_KU[0]){return _1f;}else{var _KV=E(_KU[1]),_KW=jsLineTo(_KR,E(_KV[1])[1],E(_KV[2])[1]);_KT=_KU[2];continue;}}})(_KO[2],_);};}},_KX=new T(function(){return _KM(_KJ);}),_KY=[0,30],_KZ=[0,_KE,_KY],_L0=[0,-30],_L1=[0,_KE,_L0],_L2=[1,_L1,_g],_L3=[1,_KZ,_L2],_L4=new T(function(){return _KM(_L3);}),_L5=function(_L6,_L7,_L8){while(1){var _L9=E(_L7);if(!_L9[0]){return true;}else{var _La=E(_L8);if(!_La[0]){return false;}else{if(!A(_dy,[_L6,_L9[1],_La[1]])){return false;}else{_L7=_L9[2];_L8=_La[2];continue;}}}}},_Lb=unCStr("alert"),_Lc=function(_Ld){return _L5(_dx,_Lb,_Ld);},_Le=new T(function(){return [0,0/0];}),_Lf=new T(function(){return [0,-1/0];}),_Lg=new T(function(){return [0,1/0];}),_Lh=[0,0],_Li=function(_Lj,_Lk){while(1){var _Ll=E(_Lj);if(!_Ll[0]){_Lj=[1,I_fromInt(_Ll[1])];continue;}else{var _Lm=E(_Lk);if(!_Lm[0]){_Lj=_Ll;_Lk=[1,I_fromInt(_Lm[1])];continue;}else{return I_fromRat(_Ll[1],_Lm[1]);}}}},_Ln=function(_Lo,_Lp){var _Lq=E(_Lo);if(!_Lq[0]){var _Lr=_Lq[1],_Ls=E(_Lp);return _Ls[0]==0?_Lr==_Ls[1]:I_compareInt(_Ls[1],_Lr)==0?true:false;}else{var _Lt=_Lq[1],_Lu=E(_Lp);return _Lu[0]==0?I_compareInt(_Lt,_Lu[1])==0?true:false:I_compare(_Lt,_Lu[1])==0?true:false;}},_Lv=function(_Lw,_Lx){var _Ly=E(_Lw);if(!_Ly[0]){var _Lz=_Ly[1],_LA=E(_Lx);return _LA[0]==0?_Lz<_LA[1]:I_compareInt(_LA[1],_Lz)>0;}else{var _LB=_Ly[1],_LC=E(_Lx);return _LC[0]==0?I_compareInt(_LB,_LC[1])<0:I_compare(_LB,_LC[1])<0;}},_LD=function(_LE,_LF){return !_Ln(_LF,_Lh)?[0,_Li(_LE,_LF)]:!_Ln(_LE,_Lh)?!_Lv(_LE,_Lh)?E(_Lg):E(_Lf):E(_Le);},_LG=function(_LH){var _LI=E(_LH);return _LD(_LI[1],_LI[2]);},_LJ=function(_LK){return [0,1/E(_LK)[1]];},_LL=function(_LM){var _LN=E(_LM),_LO=_LN[1];return _LO<0?[0, -_LO]:E(_LN);},_LP=function(_LQ){var _LR=E(_LQ);return _LR[0]==0?_LR[1]:I_toNumber(_LR[1]);},_LS=function(_LT){return [0,_LP(_LT)];},_LU=[0,0],_LV=[0,1],_LW=[0,-1],_LX=function(_LY){var _LZ=E(_LY)[1];return _LZ!=0?_LZ<=0?E(_LW):E(_LV):E(_LU);},_M0=function(_M1,_M2){return [0,E(_M1)[1]-E(_M2)[1]];},_M3=function(_M4){return [0, -E(_M4)[1]];},_M5=function(_M6,_M7){return [0,E(_M6)[1]+E(_M7)[1]];},_M8=function(_M9,_Ma){return [0,E(_M9)[1]*E(_Ma)[1]];},_Mb=[0,_M5,_M8,_M0,_M3,_LL,_LX,_LS],_Mc=function(_Md,_Me){return [0,E(_Md)[1]/E(_Me)[1]];},_Mf=[0,_Mb,_Mc,_LJ,_LG],_Mg=function(_Mh,_Mi){return E(_Mh)[1]!=E(_Mi)[1]?true:false;},_Mj=function(_Mk,_Ml){return E(_Mk)[1]==E(_Ml)[1];},_Mm=[0,_Mj,_Mg],_Mn=function(_Mo,_Mp){return E(_Mo)[1]<E(_Mp)[1];},_Mq=function(_Mr,_Ms){return E(_Mr)[1]<=E(_Ms)[1];},_Mt=function(_Mu,_Mv){return E(_Mu)[1]>E(_Mv)[1];},_Mw=function(_Mx,_My){return E(_Mx)[1]>=E(_My)[1];},_Mz=function(_MA,_MB){var _MC=E(_MA)[1],_MD=E(_MB)[1];return _MC>=_MD?_MC!=_MD?2:1:0;},_ME=function(_MF,_MG){var _MH=E(_MF),_MI=E(_MG);return _MH[1]>_MI[1]?E(_MH):E(_MI);},_MJ=function(_MK,_ML){var _MM=E(_MK),_MN=E(_ML);return _MM[1]>_MN[1]?E(_MN):E(_MM);},_MO=[0,_Mm,_Mz,_Mn,_Mw,_Mt,_Mq,_ME,_MJ],_MP=[0,1],_MQ=function(_MR){return E(E(_MR)[1]);},_MS=function(_MT){return E(E(_MT)[2]);},_MU=function(_MV){return E(E(_MV)[6]);},_MW=[0,2],_MX=function(_MY,_MZ){var _N0=E(_MZ);return [1,_N0,new T(function(){var _N1=_MQ(_MY);return _MX(_MY,A(_N1[1],[_N0,new T(function(){return A(_N1[7],[_MP]);})]));})];},_N2=function(_N3,_N4){var _N5=E(_N4);if(!_N5[0]){return [0];}else{var _N6=_N5[1];return !A(_N3,[_N6])?[0]:[1,_N6,new T(function(){return _N2(_N3,_N5[2]);})];}},_N7=function(_N8,_N9,_Na,_Nb){var _Nc=new T(function(){return _MU(_N8);});return _N2(function(_Nd){return A(_Nc,[_Nd,new T(function(){var _Ne=_MQ(_N9),_Nf=_Ne[7];return A(_Ne[1],[_Nb,new T(function(){return A(_MS,[_N9,new T(function(){return A(_Nf,[_MP]);}),new T(function(){return A(_Nf,[_MW]);})]);})]);})]);},_MX(_N9,_Na));},_Ng=new T(function(){return _N7(_MO,_Mf,_KD,_KG);}),_Nh=function(_Ni){return [1,_Ni,new T(function(){var _Nj=E(_Ni);return _Nj[0]==0?[0]:_Nh(_Nj[2]);})];},_Nk=function(_Nl,_Nm){var _Nn=E(_Nl);if(!_Nn[0]){return [0];}else{var _No=E(_Nm);return _No[0]==0?[0]:[1,[0,_Nn[1],_No[1]],new T(function(){return _Nk(_Nn[2],_No[2]);})];}},_Np=function(_Nq){var _Nr=new T(function(){return !_Kk(_Lc,_Nh(_Nq))?E(_Nq):E(_Ko);}),_Ns=function(_Nt,_){var _Nu=E(_Nt);if(!_Nu[0]){return _g;}else{var _Nv=A(_Kq,[E(toJSStr(_JI(120,new T(function(){return A(_JQ,[_JF,_98,E(_Nu[1])[1],_g]);}),_Nr))),_]),_Nw=_Ns(_Nu[2],_);return [1,[0,_Nv],_Nw];}};return function(_ah,_A5){return _4S(_Kh,function(_Nx,_Cm,_){return (function(_Ny,_){return [0,[0,function(_Nz,_){var _NA=A(_KC,[_]),_NB=E(_NA);if(!_NB[0]){var _NC=_3A(_Kj,_);return _Nz;}else{var _ND=_Ns(_Ng,_),_NE=E(_NB[1]),_NF=jsResetCanvas(E(_NE[2])[1]),_NG=E(_NE[1]),_NH=_NG[1],_NI=jsPushState(_NH),_NJ=jsScale(_NH,3,1),_NK=jsPushState(_NH),_NL=jsTranslate(_NH,50,130),_NM=jsPushState(_NH),_NN=jsRotate(_NH,3.141592653589793),_NO=jsBeginPath(_NH),_NP=A(_KX,[_NG,_]),_NQ=A(_L4,[_NG,_]),_NR=A(_KM,[_Nk(_Ng,_ND),_NG,_]),_NS=jsStroke(_NH),_NT=jsPopState(_NH),_NU=jsPopState(_NH),_NV=jsPopState(_NH);return _Nz;}},_Cf],_Ny];})(_Cm,_);},_ah,_A5);};},_NW=[1,_Ko],_NX=new T(function(){return _bd(_8s,_8t,_94,_sA,_qp);}),_NY=new T(function(){return A(_NX,[_9,_sC,_NW]);}),_NZ=new T(function(){return _tU(_NY,_xC);}),_O0=function(_O1,_){var _O2=A(_NZ,[_O1,_]),_O3=E(_O2),_O4=E(_O3[1]);return [0,[0,function(_O5,_){var _O6=A(_O4[1],[_O5,_]),_O7=_G(_O5,_);return _O5;},new T(function(){var _O8=E(_O4[2]);return _O8[0]==0?E(_NW):E(_O8);})],_O3[2]];},_O9=function(_Oa,_){var _Ob=_4S(_O0,_Np,_Oa,_),_Oc=E(_Ob),_Od=E(_Oc[1]),_Oe=new T(function(){return _z8(_11,_Od[1]);});return [0,[0,function(_Of,_){var _Og=A(_JB,[_Of,_]),_Oh=A(_Oe,[_Of,_]);return _Of;},_Od[2]],_Oc[2]];},_Oi=unCStr("work?"),_Oj=new T(function(){return _Ew(_8s,_8t,_Fc,_Fd);}),_Ok=function(_Ol){return E(E(_Ol)[5]);},_Om=unCStr("for"),_On=unCStr("label"),_Oo=function(_Op,_Oq,_Or,_Os){var _Ot=new T(function(){return A(_Ok,[_Oq,_On,_Or]);}),_Ou=new T(function(){return _8u(_Oq);}),_Ov=new T(function(){return _b5(_Ou);}),_Ow=new T(function(){return _43(_Op);}),_Ox=new T(function(){return _3D(_Op);}),_Oy=new T(function(){return _Ej(_Oq);}),_Oz=new T(function(){return _43(_Op);}),_OA=new T(function(){return _43(_Op);}),_OB=new T(function(){return _3D(_Op);}),_OC=new T(function(){return _3D(_Op);});return function(_OD){return A(_OC,[new T(function(){return A(_OB,[new T(function(){return A(_OA,[[0,_OD,_OD]]);}),function(_OE){return A(_Oz,[[0,[1,_4b,new T(function(){var _OF=E(E(_OE)[1]);return _2l(_4i(0,E(_OF[2])[1],_g),_OF[1]);})],new T(function(){return E(E(_OE)[2]);})]]);}]);}),function(_OG){var _OH=new T(function(){return A(_Oy,[_Ot,[1,[0,_Om,new T(function(){return E(E(_OG)[1]);})],_g]]);});return A(_Ox,[new T(function(){return A(_Os,[new T(function(){return E(E(_OG)[2]);})]);}),function(_OI){var _OJ=E(_OI),_OK=E(_OJ[1]);return A(_Ow,[[0,[0,new T(function(){return A(_Ov,[_OH,_OK[1]]);}),_OK[2]],_OJ[2]]]);}]);}]);};},_OL=function(_OM,_ON){return _Oo(_3C,_8s,function(_Cm,_){return _z(_OM,_Cm,_);},new T(function(){return _tU(new T(function(){return A(_Oj,[_OM,_ON]);}),_zl);}));},_OO=function(_Ld){return _OL(_Oi,_Ld);},_OP=unCStr("study?"),_OQ=function(_Ld){return _OL(_OP,_Ld);},_OR=[1,_OQ,_g],_OS=[1,_OO,_OR],_OT=new T(function(){return A(_G9,[_OS]);}),_OU=unCStr("Do you "),_OV=new T(function(){return _we(_z,_OU);}),_OW=function(_OX,_){var _OY=A(_OT,[_OX,_]),_OZ=E(_OY),_P0=E(_OZ[1]);return [0,[0,function(_P1,_){var _P2=A(_OV,[_P1,_]),_P3=A(_P0[1],[_P1,_]),_P4=_G(_P1,_);return _P1;},_P0[2]],_OZ[2]];},_P5=unCStr("do you enjoy your work? "),_P6=new T(function(){return _we(_z,_P5);}),_P7=function(_P8,_P9,_Pa,_){return _4S(_P8,function(_Pb){return E(_P9);},_Pa,_);},_Pc=function(_Pd,_Pe,_1C,_){return _P7(_Pd,_Pe,_1C,_);},_Pf=function(_Pg){return err(_Pg);},_Ph=[0,_4S,_Pc,_1b,_Pf],_Pi=function(_Pj,_Pk,_Pl,_Pm,_Pn,_Po){var _Pp=new T(function(){return _b5(_Pj);});return A(_Pk,[new T(function(){return A(_Pm,[_Po]);}),function(_Pq){var _Pr=E(_Pq),_Ps=E(_Pr[1]);return A(_Pk,[new T(function(){return A(_Pn,[_Pr[2]]);}),function(_Pt){var _Pu=E(_Pt),_Pv=E(_Pu[1]);return A(_Pl,[[0,[0,new T(function(){return A(_Pp,[_Ps[1],_Pv[1]]);}),new T(function(){var _Pw=E(_Ps[2]);return _Pw[0]==0?E(_Pv[2]):E(_Pw);})],_Pu[2]]]);}]);}]);},_Px=function(_Py,_Pz,_PA,_PB,_PC,_PD){var _PE=new T(function(){return _Ej(_PA);});return A(_Py,[new T(function(){return A(_PB,[_PD]);}),function(_PF){var _PG=E(_PF),_PH=E(_PG[1]);return A(_Pz,[[0,[0,new T(function(){return A(_PE,[_PH[1],_PC]);}),_PH[2]],_PG[2]]]);}]);},_PI=function(_PJ){return E(E(_PJ)[12]);},_PK=function(_PL,_PM,_PN,_PO,_PP,_PQ,_PR){var _PS=new T(function(){return A(_PI,[_PL,new T(function(){var _PT=A(_PN,[_PP]),_PU=E(_IA),_PV=hs_eqWord64(_PT[1],_PU[1]);if(!E(_PV)){return A(_bb,[_PO,_PP]);}else{var _PW=hs_eqWord64(_PT[2],_PU[2]);return E(_PW)==0?A(_bb,[_PO,_PP]):E(_PP);}}),_PQ,_PR]);}),_PX=new T(function(){return _43(_PM);});return function(_PY){return A(_PX,[[0,[0,_PS,[1,_PP]],_PY]]);};},_PZ=[0,_7f,_Ev],_Q0=[1,_PZ,_g],_Q1=[0,_7f,_Ev],_Q2=[1,_Q1,_g],_Q3=function(_Q4,_Q5,_Q6,_Q7){var _Q8=new T(function(){return _HZ(_Q7,_Q6,_94,_qo);}),_Q9=new T(function(){return A(_43,[_Q4,_0]);}),_Qa=new T(function(){return A(_43,[_Q4,_gn]);}),_Qb=new T(function(){return _8u(_Q7);}),_Qc=new T(function(){return _8w(_Q6);}),_Qd=new T(function(){return _8N(_Q7);}),_Qe=new T(function(){return _3D(_Q4);});return function(_Qf,_Qg,_Qh){return A(_Qe,[new T(function(){var _Qi=new T(function(){return !E(_Qf)?E(_Q2):[0];}),_Qj=new T(function(){return _PK(_Q7,_Qc,_94,_sA,_Qh,new T(function(){return A(_Qd,[_Qh]);}),_0);}),_Qk=new T(function(){return !E(_Qf)?[0]:E(_Q0);}),_Ql=new T(function(){return _PK(_Q7,_Qc,_94,_sA,_Qg,new T(function(){return A(_Qd,[_Qg]);}),_0);});return A(_Q8,[function(_Qm){var _Qn=E(_Qc);return _Pi(_Qb,_Qn[1],_Qn[3],function(_Qo){var _Qp=E(_Qc);return _Px(_Qp[1],_Qp[3],_Q7,_Ql,_Qk,_Qo);},function(_Qq){var _Qr=E(_Qc);return _Px(_Qr[1],_Qr[3],_Q7,_Qj,_Qi,_Qq);},_Qm);}]);}),function(_Qs){return !_tj(_Qs,_Qg)?E(_Q9):E(_Qa);}]);};},_Qt=new T(function(){return _Q3(_Ph,_wL,_8t,_8s);}),_Qu=unCStr("yes"),_Qv=unCStr("no"),_Qw=new T(function(){return A(_Qt,[_gn,_Qu,_Qv]);}),_Qx=unCStr("ok"),_Qy=[1,_Qx],_Qz=new T(function(){return A(_zn,[_Qy]);}),_QA=new T(function(){return _tU(_Qz,_zl);}),_QB=function(_QC,_){var _QD=A(_Qw,[_QC,_]),_QE=E(_QD),_QF=E(_QE[1]),_QG=A(_QA,[_QE[2],_]),_QH=E(_QG);return [0,[0,function(_QI,_){var _QJ=A(_P6,[_QI,_]),_QK=A(_QF[1],[_QI,_]),_QL=A(E(_QH[1])[1],[_QI,_]),_QM=_G(_QI,_);return _QI;},new T(function(){var _QN=E(_QF[2]);return _QN[0]==0?[0]:[1,[0,_QN[1]]];})],_QH[2]];},_QO=unCStr("do you study in "),_QP=new T(function(){return _we(_z,_QO);}),_QQ=unCStr("University"),_QR=function(_Ld){return _OL(_QQ,_Ld);},_QS=unCStr("High School"),_QT=function(_Ld){return _OL(_QS,_Ld);},_QU=[1,_QT,_g],_QV=[1,_QR,_QU],_QW=new T(function(){return A(_G9,[_QV]);}),_QX=function(_QY,_){var _QZ=A(_QW,[_QY,_]),_R0=E(_QZ),_R1=E(_R0[1]);return [0,[0,function(_R2,_){var _R3=A(_QP,[_R2,_]),_R4=A(_R1[1],[_R2,_]);return _R2;},new T(function(){var _R5=E(_R1[2]);return _R5[0]==0?[0]:[1,[1,_R5[1]]];})],_R0[2]];},_R6=new T(function(){return _cN("main.hs:(293,11)-(300,64)|case");}),_R7=unCStr(" that you enjoy your work"),_R8=unCStr("False"),_R9=new T(function(){return _2l(_R8,_R7);}),_Ra=unCStr("True"),_Rb=new T(function(){return _2l(_Ra,_R7);}),_Rc=[0,32],_Rd=function(_Re,_Rf){var _Rg=new T(function(){return _w1(_z,new T(function(){return unAppCStr("You are ",new T(function(){return _2l(_Re,[1,_Rc,_Rf]);}));}));});return function(_ah,_A5){return _4S(_OW,function(_Rh){var _Ri=new T(function(){return !_tj(_Rh,_OP)?!_tj(_Rh,_Oi)?E(_R6):E(_QB):E(_QX);});return function(_ah,_A5){return _4S(_Ri,function(_Rj){return function(_Rk,_){var _Rl=A(new T(function(){var _Rm=E(_Rj);if(!_Rm[0]){var _Rn=new T(function(){return _w1(_z,new T(function(){return unAppCStr("You work and it is ",new T(function(){return !E(_Rm[1])?E(_R9):E(_Rb);}));}));});return function(_Ro,_){return [0,[0,function(_Rp,_){var _Rq=A(_Rn,[_Rp,_]);return _Rp;},_9],_Ro];};}else{var _Rr=new T(function(){return _w1(_z,new T(function(){return unAppCStr("You study at the ",_Rm[1]);}));});return function(_Rs,_){return [0,[0,function(_Rt,_){var _Ru=A(_Rr,[_Rt,_]);return _Rt;},_9],_Rs];};}}),[_Rk,_]),_Rv=E(_Rl),_Rw=E(_Rv[1]);return [0,[0,function(_Rx,_){var _Ry=A(_Rg,[_Rx,_]),_Rz=A(_Rw[1],[_Rx,_]);return _Rx;},_Rw[2]],_Rv[2]];};},_ah,_A5);};},_ah,_A5);};},_RA=function(_RB){var _RC=E(_RB);return _Rd(_RC[1],_RC[2]);},_RD=unCStr("Who are you? "),_RE=new T(function(){return _w1(_z,_RD);}),_RF=unCStr("name"),_RG=unCStr("placeholder"),_RH=[0,_RG,_RF],_RI=[1,_RH,_g],_RJ=unCStr("surname"),_RK=[0,_RG,_RJ],_RL=[1,_RK,_g],_RM=[1,_Qx],_RN=new T(function(){return A(_zn,[_RM]);}),_RO=new T(function(){return _tU(_RN,_zl);}),_RP=new T(function(){return A(_NX,[_9,_sC,_9]);}),_RQ=new T(function(){return A(_NX,[_9,_sC,_9]);}),_RR=function(_RS,_){var _RT=A(_RQ,[_RS,_]),_RU=E(_RT),_RV=E(_RU[1]),_RW=A(_RP,[_RU[2],_]),_RX=E(_RW),_RY=E(_RX[1]),_RZ=A(_RO,[_RX[2],_]),_S0=E(_RZ),_S1=new T(function(){return _1v(_RY[1],_RL);}),_S2=new T(function(){return _1v(_RV[1],_RI);});return [0,[0,function(_S3,_){var _S4=A(_RE,[_S3,_]),_S5=A(_S2,[_S3,_]),_S6=_G(_S3,_),_S7=A(_S1,[_S3,_]),_S8=_G(_S3,_),_S9=A(E(_S0[1])[1],[_S3,_]),_Sa=_G(_S3,_);return _S3;},new T(function(){var _Sb=E(_RV[2]);if(!_Sb[0]){return [0];}else{var _Sc=E(_RY[2]);return _Sc[0]==0?[0]:[1,[0,_Sb[1],_Sc[1]]];}})],_S0[2]];},_Sd=unCStr("http://mflowdemo.herokuapp.com/noscript/monadicwidgets/combination"),_Se=unCStr("This formulary is the same than the one "),_Sf=[0,97],_Sg=[1,_Sf,_g],_Sh=function(_Si,_Sj){var _Sk=new T(function(){return A(_Si,[_Sj]);});return function(_Sl,_){var _Sm=jsCreateElem(toJSStr(_Sg)),_Sn=jsAppendChild(_Sm,E(_Sl)[1]),_So=[0,_Sm],_Sp=A(_Sk,[_So,_]);return _So;};},_Sq=unCStr("run in the server by MFlow"),_Sr=new T(function(){return _Sh(_z,_Sq);}),_Ss=unCStr("href"),_St=function(_Su,_){var _Sv=_z(_Se,_Su,_),_Sw=A(_Sr,[_Su,_]),_Sx=A(_1g,[_1m,_Sw,_Ss,_Sd,_]);return _Su;},_Sy=new T(function(){return _w1(_11,_St);}),_Sz=unCStr("Fields of a form appear in sequence. Some of the fields trigger events instantly. Some others use a button to trigger them. It also contains option buttons, radio buttons etc"),_SA=new T(function(){return _w1(_z,_Sz);}),_SB=function(_SC,_){var _SD=_4S(_RR,_RA,_SC,_),_SE=E(_SD),_SF=E(_SE[1]);return [0,[0,function(_SG,_){var _SH=A(_SA,[_SG,_]),_SI=A(_Sy,[_SG,_]),_SJ=A(_SF[1],[_SG,_]);return _SG;},_SF[2]],_SE[2]];},_SK=unCStr("this example show a image gallery. It advances each 20 seconds and by pressing the button"),_SL=new T(function(){return _w1(_z,_SK);}),_SM=[1,_wy],_SN=unCStr("GalleryIndex"),_SO=[0,I_fromBits([203033753,3200738202]),I_fromBits([3394053259,1065442867]),_Ae,_Af,_SN],_SP=[0,I_fromBits([203033753,3200738202]),I_fromBits([3394053259,1065442867]),_SO,_g],_SQ=function(_SR){return E(_SP);},_SS=new T(function(){return _CJ(_1I,_4a,_1G,_SQ);}),_ST=function(_SU,_){var _SV=A(_SS,[_SU,_]);return [0,[0,_zh,new T(function(){var _SW=E(E(_SV)[1]);return _SW[0]==0?E(_SM):E(_SW);})],new T(function(){return E(E(_SV)[2]);})];},_SX=unCStr("100%"),_SY=[0,62],_SZ=[1,_SY,_g],_T0=[1,_SZ],_T1=new T(function(){return A(_zn,[_T0]);}),_T2=new T(function(){return _tU(_T1,_zl);}),_T3=function(_T4){return E(_T2);},_T5=unCStr("https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRAgKkpDyzk8kdIqk5ECsZ14XgbpBzyWFvrCrHombkSBAUn6jFo"),_T6=[1,_T5,_g],_T7=unCStr("https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSfP70npv4FOrkBjScP0tVu2t3veSNoFQ6MMxX6LDO8kldNeu-DxQ"),_T8=[1,_T7,_T6],_T9=unCStr("https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcS53axpzkDyzEUAdaIP3YsaHuR-_YqN9qFK3W4bp_D2OBZfW5BU_Q"),_Ta=[1,_T9,_T8],_Tb=unCStr("https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQ_ywj-zxDq3h_B4l48XHsjTywrdbK5egxvhxkYJ1HOkDFXd_-H"),_Tc=[1,_Tb,_Ta],_Td=unCStr("https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQmmC4kV3NPFIpGL_x4H_iHG_p-c93DGjWfkxVtjxEFVng7A8o-nw"),_Te=[1,_Td,_Tc],_Tf=unCStr("http://almaer.com/blog/uploads/interview-haskell.png"),_Tg=[1,_Tf,_Te],_Th=unCStr("height"),_Ti=unCStr("img"),_Tj=function(_Tk,_){var _Tl=jsCreateElem(toJSStr(E(_Ti))),_Tm=jsAppendChild(_Tl,E(_Tk)[1]);return [0,_Tl];},_Tn=function(_To,_Tp){while(1){var _Tq=E(_To);if(!_Tq[0]){return E(_Tp);}else{_To=_Tq[2];var _Tr=_Tp+1|0;_Tp=_Tr;continue;}}},_Ts=new T(function(){return [0,_Tn(_Tg,0)-1|0];}),_Tt=[0,_Z,_wn],_Tu=unCStr("src"),_Tv=unCStr("width"),_Tw=function(_Tx){return function(_ah,_A5){return _4S(function(_Cm,_){return _4S(_Cd,function(_Ty){return function(_Tz,_){return [0,_Tt,new T(function(){var _TA=E(_Ty);return [0,_TA[1],_TA[2],_TA[3],_TA[4],_TA[5],new T(function(){return _C0(I_fromBits([203033753,3200738202]),I_fromBits([3394053259,1065442867]),_SO,_g,new T(function(){var _TB=E(_Tx)[1];return _TB!=E(_Ts)[1]?[0,_TB+1|0]:E(_wy);}),_TA[6]);})];})];};},_Cm,_);},function(_TC,_Cm,_){return (function(_Cm,_){return _4S(function(_TD,_){return [0,[0,function(_TE,_){var _TF=_Tj(_TE,_),_TG=A(_1g,[_1m,_TF,_Tu,new T(function(){var _TH=E(_Tx)[1];return _TH>=0?_qu(_Tg,_TH):E(_qr);}),_]),_TI=A(_1g,[_1m,_TF,_Tv,_SX,_]),_TJ=A(_1g,[_1m,_TF,_Th,_SX,_]),_TK=_G(_TE,_);return _TE;},_Cf],_TD];},_T3,_Cm,_);})(_Cm,_);},_ah,_A5);};},_TL=function(_Cm,_){return _4S(_ST,_Tw,_Cm,_);},_TM=function(_TN,_TO,_){return _TP(_TO,_);},_TQ=function(_Cm,_){return _zG(_TL,_TM,_Cm,_);},_TR=[0,20000],_TS=new T(function(){return _4n(_1I,_4a,_1G,_1D);}),_TT=function(_TU,_TV,_TW,_){var _TX=A(_TS,[_TW,_]),_TY=new T(function(){return E(E(_TX)[1]);}),_TZ=new T(function(){return [0,_U0];}),_U0=function(_){var _U1=jsFind(toJSStr(E(_TY))),_U2=E(_U1);if(!_U2[0]){return _1f;}else{var _U3=E(_U2[1]),_U4=E(_U3),_U5=jsClearChildren(_U3[1]),_U6=E(_k)[1],_U7=takeMVar(_U6),_U8=A(_TV,[_U7,_]),_U9=E(_U8),_Ua=E(_U9[1]),_Ub=_Ua[1],_Uc=_Ua[2],_=putMVar(_U6,new T(function(){var _Ud=E(_U9[2]);return [0,_Ud[1],_Ud[2],_Ud[3],_Ud[4],_0,_Ud[6]];}));if(!E(E(_U7)[5])){var _Ue=A(_Ub,[_U4,_]),_Uf=E(_Uc);if(!_Uf[0]){var _Ug=jsSetTimeout(E(_TU)[1],E(_TZ)[1]);return _1f;}else{var _Uh=E(_Uf[1]);return _1f;}}else{var _Ui=A(_7,[E(_U4[1]),_]),_Uj=A(_Ub,[[0,_Ui],_]),_Uk=E(_Uc);if(!_Uk[0]){var _Ul=jsSetTimeout(E(_TU)[1],E(_TZ)[1]);return _1f;}else{var _Um=E(_Uk[1]);return _1f;}}}},_Un=jsSetTimeout(E(_TU)[1],E(_TZ)[1]);return _zt(_TY,_TV,new T(function(){return E(E(_TX)[2]);}),_);},_TP=function(_Uo,_){var _Up=_TT(_TR,_TQ,_Uo,_),_Uq=E(_Up),_Ur=E(_Uq[1]);return [0,[0,function(_Us,_){var _Ut=A(_SL,[_Us,_]),_Uu=A(_Ur[1],[_Us,_]);return _Us;},_Ur[2]],_Uq[2]];},_Uv=function(_Uw){var _Ux=new T(function(){return _we(_z,new T(function(){return unAppCStr(" returns ",_Uw);}));});return function(_Uy,_){return [0,[0,_Ux,_Cf],_Uy];};},_Uz=unCStr("This link say Hey!"),_UA=function(_Cm,_){return _z(_Uz,_Cm,_);},_UB=unCStr("Hey!"),_UC=function(_){var _=0,_UD=newMVar(),_=putMVar(_UD,_9);return [0,_UD];},_UE=new T(function(){return _2(_UC);}),_UF=new T(function(){return _4n(_1I,_4a,_1G,_1D);}),_UG=new T(function(){return A(_94,[_6u]);}),_UH=function(_UI,_UJ,_){var _=putMVar(E(_UI)[1],_UJ);return _1f;},_UK=function(_UL,_UM,_){return _t1(function(_){return _UH(_UE,_UL,_);},_UM,_);},_UN=function(_){var _UO=E(_UE)[1],_UP=takeMVar(_UO),_=putMVar(_UO,_UP);return _UP;},_UQ=function(_UR,_US,_UT,_UU){var _UV=new T(function(){return _Sh(_11,_UU);}),_UW=new T(function(){return unAppCStr("#/",new T(function(){var _UX=A(_US,[_UT]),_UY=E(_UG),_UZ=hs_eqWord64(_UX[1],_UY[1]);if(!E(_UZ)){return A(_bb,[_UR,_UT]);}else{var _V0=hs_eqWord64(_UX[2],_UY[2]);return E(_V0)==0?A(_bb,[_UR,_UT]):E(_UT);}}));});return function(_V1,_){var _V2=A(_UF,[_V1,_]),_V3=0,_V4=function(_,_V5,_V6){var _V7=new T(function(){return E(E(_V2)[1]);}),_V8=function(_V9,_){var _Va=A(_UV,[_V9,_]),_Vb=A(_1g,[_1m,_Va,_Ss,_UW,_]),_Vc=E(_Va),_Vd=jsSetCB(_Vc[1],E(_tA)[1],E([0,function(_Ve,_Vf,_){return (function(_){var _Vg=0;if(!E(_Vg)){return (function(_){var _Vh=takeMVar(E(_UE)[1]),_Vi=jsCatch(function(_){return (function(_){return [1,_V7];})();},function(_1C,_){return _UK(_Vh,_1C,_);});return _UH(_UE,_Vi,_);})();}else{var _Vj=takeMVar(E(_UE)[1]),_Vk=jsCatch(function(_){return [1,_V7];},function(_1C,_){return _UK(_Vj,_1C,_);});return _UH(_UE,_Vk,_);}})(_);}])[1]);return _Vc;},_Vl=E(_V5);return _Vl[0]==0?[0,[0,_V8,_9],_V6]:!_tj(_Vl[1],_V7)?[0,[0,_V8,_9],_V6]:[0,[0,_V8,[1,_UT]],_V6];};if(!E(_V3)){var _Vm=_UN();return _V4(_,_Vm,new T(function(){return E(E(_V2)[2]);}));}else{var _Vn=E(_UE)[1],_Vo=takeMVar(_Vn),_=putMVar(_Vn,_Vo);return _V4(_,_Vo,new T(function(){return E(E(_V2)[2]);}));}};},_Vp=new T(function(){return _UQ(_Fd,_Fc,_UB,_UA);}),_Vq=new T(function(){return _tU(_Vp,_zl);}),_Vr=function(_Vs,_){var _Vt=A(_Vq,[_Vs,_]),_Vu=E(_Vt),_Vv=E(_Vu[1]);return [0,[0,function(_Vw,_){var _Vx=_G(_Vw,_),_Vy=A(_Vv[1],[_Vw,_]);return _Vw;},_Vv[2]],_Vu[2]];},_Vz=function(_){var _VA=E(_t0)[1],_VB=takeMVar(_VA),_=putMVar(_VA,_VB);return _VB;},_VC=function(_VD,_){var _VE=0;if(!E(_VE)){var _VF=_Vz();return [0,[0,_Z,[1,_VF]],_VD];}else{var _VG=E(_t0)[1],_VH=takeMVar(_VG),_=putMVar(_VG,_VH);return [0,[0,_Z,[1,_VH]],_VD];}},_VI=function(_VJ,_VK,_VL){return A(_VJ,[[1,_38,new T(function(){return A(_VK,[_VL]);})]]);},_VM=unCStr("Key "),_VN=unCStr("Mouse "),_VO=unCStr("Click "),_VP=unCStr("NoData"),_VQ=function(_VR){return _2l(_VP,_VR);},_VS=unCStr(": empty list"),_VT=unCStr("Prelude."),_VU=function(_VV){return err(_2l(_VT,new T(function(){return _2l(_VV,_VS);})));},_VW=unCStr("foldr1"),_VX=new T(function(){return _VU(_VW);}),_VY=function(_VZ,_W0){var _W1=E(_W0);if(!_W1[0]){return E(_VX);}else{var _W2=_W1[1],_W3=E(_W1[2]);return _W3[0]==0?E(_W2):A(_VZ,[_W2,new T(function(){return _VY(_VZ,_W3);})]);}},_W4=[0,32],_W5=function(_W6,_W7){var _W8=E(_W7);switch(_W8[0]){case 0:return E(_VQ);case 1:var _W9=function(_Wa){return _4i(11,E(_W8[1])[1],[1,_W4,new T(function(){var _Wb=E(_W8[2]);return [1,_4h,new T(function(){return A(_VY,[_VI,[1,function(_Wc){return _4i(0,E(_Wb[1])[1],_Wc);},[1,function(_Wd){return _4i(0,E(_Wb[2])[1],_Wd);},_g]],[1,_4g,_Wa]]);})];})]);};return E(_W6)[1]<11?function(_We){return _2l(_VO,new T(function(){return _W9(_We);}));}:function(_Wf){return [1,_4h,new T(function(){return _2l(_VO,new T(function(){return _W9([1,_4g,_Wf]);}));})];};case 2:var _Wg=function(_Wh){return _2l(_VN,new T(function(){var _Wi=E(_W8[1]);return [1,_4h,new T(function(){return A(_VY,[_VI,[1,function(_Wj){return _4i(0,E(_Wi[1])[1],_Wj);},[1,function(_Wk){return _4i(0,E(_Wi[2])[1],_Wk);},_g]],[1,_4g,_Wh]]);})];}));};return E(_W6)[1]<11?E(_Wg):function(_Wl){return [1,_4h,new T(function(){return _Wg([1,_4g,_Wl]);})];};default:var _Wm=_W8[1];return E(_W6)[1]<11?function(_Wn){return _2l(_VM,new T(function(){return _4i(11,E(_Wm)[1],_Wn);}));}:function(_Wo){return [1,_4h,new T(function(){return _2l(_VM,new T(function(){return _4i(11,E(_Wm)[1],[1,_4g,_Wo]);}));})];};}},_Wp=function(_Wq){var _Wr=new T(function(){return _w1(_z,new T(function(){var _Ws=E(_Wq);return _2l(_Ws[1],[1,_Rc,new T(function(){return A(_W5,[_98,_Ws[2],_g]);})]);}));});return function(_Wt,_){return [0,[0,_Wr,_Cf],_Wt];};},_Wu=function(_Cm,_){return _4S(_VC,_Wp,_Cm,_);},_Wv=function(_Ww){return E(_Wu);},_Wx=[14,coercionToken],_Wy=[12,coercionToken],_Wz=[9,coercionToken],_WA=[11,coercionToken],_WB=[5,coercionToken],_WC=[10,coercionToken],_WD=[6,coercionToken],_WE=[7,coercionToken],_WF=unCStr("height:100px;background-color:lightgreen;position:relative"),_WG=unCStr("h1"),_WH=function(_WI,_WJ){var _WK=new T(function(){return A(_WI,[_WJ]);});return function(_WL,_){var _WM=jsCreateElem(toJSStr(E(_WG))),_WN=jsAppendChild(_WM,E(_WL)[1]),_WO=[0,_WM],_WP=A(_WK,[_WO,_]);return _WO;};},_WQ=unCStr("Mouse events here"),_WR=new T(function(){return _WH(_z,_WQ);}),_WS=new T(function(){return _N(_11,_WR);}),_WT=function(_WU,_){var _WV=A(_WS,[_WU,_]),_WW=A(_1g,[_1m,_WV,_DH,_WF,_]);return _WV;},_WX=[0,_WT,_Cf],_WY=function(_WZ,_){return [0,_WX,_WZ];},_X0=new T(function(){return _tU(_WY,_WE);}),_X1=new T(function(){return _tU(_X0,_WD);}),_X2=new T(function(){return _tU(_X1,_WC);}),_X3=new T(function(){return _tU(_X2,_WB);}),_X4=new T(function(){return _tU(_X3,_WA);}),_X5=new T(function(){return _tU(_X4,_zl);}),_X6=new T(function(){return _tU(_X5,_Wz);}),_X7=new T(function(){return _tU(_X6,_Wy);}),_X8=new T(function(){return _tU(_X7,_Wx);}),_X9=new T(function(){return _tU(_X8,_xC);}),_Xa=unCStr("http://todomvc.com"),_Xb=unCStr("Work in progress for a todo application to be added to "),_Xc=unCStr("todomvc.com"),_Xd=new T(function(){return _Sh(_z,_Xc);}),_Xe=function(_Xf,_){var _Xg=_z(_Xb,_Xf,_),_Xh=A(_Xd,[_Xf,_]),_Xi=A(_1g,[_1m,_Xh,_Ss,_Xa,_]);return _Xf;},_Xj=new T(function(){return _w1(_11,_Xe);}),_Xk=unCStr("Tasks"),_Xl=[0,I_fromBits([3561938990,657451105]),I_fromBits([3021302870,108592267]),_Ae,_Af,_Xk],_Xm=2,_Xn=function(_Xo,_Xp,_Xq,_Xr,_){var _Xs=A(_Xq,[_Xr,_]),_Xt=E(_Xs),_Xu=E(_Xt[1]),_Xv=_Xu[1];return [0,[0,function(_Xw,_){var _Xx=jsFind(toJSStr(E(_Xo))),_Xy=E(_Xx);if(!_Xy[0]){return _Xw;}else{var _Xz=_Xy[1];switch(E(_Xp)){case 0:var _XA=A(_Xv,[_Xz,_]);return _Xw;case 1:var _XB=E(_Xz),_XC=_XB[1],_XD=jsGetChildren(_XC),_XE=E(_XD);if(!_XE[0]){var _XF=A(_Xv,[_XB,_]);return _Xw;}else{var _XG=jsCreateElem(toJSStr(E(_4A))),_XH=jsAddChildBefore(_XG,_XC,E(_XE[1])[1]),_XI=A(_Xv,[[0,_XG],_]);return _Xw;}break;default:var _XJ=E(_Xz),_XK=jsClearChildren(_XJ[1]),_XL=A(_Xv,[_XJ,_]);return _Xw;}}},_Xu[2]],_Xt[2]];},_XM=[0,_Z,_wn],_XN=function(_XO,_){return [0,_XM,_XO];},_XP=unCStr("Pattern match failure in do expression at main.hs:349:7-25"),_XQ=new T(function(){return _Pf(_XP);}),_XR=function(_XS,_XT,_XU,_XV){return A(_XS,[new T(function(){return function(_){var _XW=jsSet(E(_XT)[1],toJSStr(E(_XU)),toJSStr(E(_XV)));return _1f;};})]);},_XX=unCStr("text"),_XY=unCStr("value"),_XZ=new T(function(){return _6v(_8X,_92);}),_Y0=new T(function(){return A(_XZ,[_6u]);}),_Y1=new T(function(){return A(_XZ,[_6u]);}),_Y2=unCStr("Prelude.read: ambiguous parse"),_Y3=unCStr("Prelude.read: no parse"),_Y4=function(_Y5){return [1,function(_Y6){return A(_mI,[_Y6,function(_Y7){return E([3,_Y5,_e0]);}]);}];},_Y8=function(_Y9){while(1){var _Ya=(function(_Yb){var _Yc=E(_Yb);if(!_Yc[0]){return [0];}else{var _Yd=_Yc[2],_Ye=E(_Yc[1]);if(!E(_Ye[2])[0]){return [1,_Ye[1],new T(function(){return _Y8(_Yd);})];}else{_Y9=_Yd;return null;}}})(_Y9);if(_Ya!=null){return _Ya;}}},_Yf=function(_Yg,_Yh){var _Yi=_Y8(_cQ(A(E(_Yg)[3],[_oZ,_Y4]),_Yh));return _Yi[0]==0?err(_Y3):E(_Yi[2])[0]==0?E(_Yi[1]):err(_Y2);},_Yj=function(_Yk,_Yl,_Ym,_Yn){var _Yo=new T(function(){return _bb(_Yl);}),_Yp=new T(function(){return _bd(_8s,_8t,_Ym,_Yl,_Yk);});return [0,function(_Yq){return A(_Yp,[[1,_Yn],_XX,_Yq]);},function(_Yr,_){var _Ys=E(_Yn),_Yt=jsFind(toJSStr(_Ys)),_Yu=E(_Yt);return _Yu[0]==0?_4I(_Ys):A(_XR,[_1m,_Yu[1],_XY,new T(function(){var _Yv=A(_Ym,[_Yr]),_Yw=E(_Y0),_Yx=hs_eqWord64(_Yv[1],_Yw[1]);if(!E(_Yx)){return A(_Yo,[_Yr]);}else{var _Yy=hs_eqWord64(_Yv[2],_Yw[2]);return E(_Yy)==0?A(_Yo,[_Yr]):E(_Yr);}}),_]);},function(_){var _Yz=E(_Yn),_YA=jsFind(toJSStr(_Yz)),_YB=E(_YA);if(!_YB[0]){return _4I(_Yz);}else{var _YC=_El(E(_YB[1])[1],_XY,_);return new T(function(){var _YD=A(_XZ,[_YC]),_YE=E(_Y1),_YF=hs_eqWord64(_YD[1],_YE[1]);if(!E(_YF)){return _Yf(_Yk,_YC);}else{var _YG=hs_eqWord64(_YD[2],_YE[2]);return E(_YG)==0?_Yf(_Yk,_YC):E(_YC);}});}}];},_YH=unCStr("todo"),_YI=new T(function(){var _YJ=_Yj(_HW,_Fd,_Fc,_YH);return [0,_YJ[1],_YJ[2],_YJ[3]];}),_YK=new T(function(){var _YL=A(E(_YI)[2],[_g]);return function(_YM,_){var _YN=A(_YL,[_]);return [0,[0,_Z,[1,_YN]],_YM];};}),_YO=[1,_g],_YP=[0,I_fromBits([3561938990,657451105]),I_fromBits([3021302870,108592267]),_Xl,_g],_YQ=function(_YR){return E(_YP);},_YS=new T(function(){return _CJ(_1I,_4a,_1G,_YQ);}),_YT=function(_YU,_){var _YV=A(_YS,[_YU,_]);return [0,[0,_zh,new T(function(){var _YW=E(E(_YV)[1]);return _YW[0]==0?E(_YO):E(_YW);})],new T(function(){return E(E(_YV)[2]);})];},_YX=[0,_Z,_wn],_YY=[0,_Z,_wn],_YZ=function(_Z0,_Z1,_){return [0,_YY,_Z1];},_Z2=[0,_Z,_wn],_Z3=function(_Z4,_){return [0,_Z2,_Z4];},_Z5=unCStr("list"),_Z6=unCStr("check"),_Z7=new T(function(){return A(_GS,[_0,_Z6]);}),_Z8=new T(function(){return _tU(_Z7,_zl);}),_Z9=function(_Za,_){var _Zb=A(_Z8,[_Za,_]),_Zc=E(_Zb),_Zd=E(_Zc[1]);return [0,[0,_Zd[1],new T(function(){var _Ze=E(_Zd[2]);return _Ze[0]==0?[0]:[1,E(_Ze[1])[1]];})],_Zc[2]];},_Zf=unCStr("text-decoration:line-through;"),_Zg=unCStr("li"),_Zh=function(_Zi,_Zj){var _Zk=new T(function(){return A(_Zi,[_Zj]);});return function(_Zl,_){var _Zm=jsCreateElem(toJSStr(E(_Zg))),_Zn=jsAppendChild(_Zm,E(_Zl)[1]),_Zo=[0,_Zm],_Zp=A(_Zk,[_Zo,_]);return _Zo;};},_Zq=function(_Zr){var _Zs=E(_Zr);if(!_Zs[0]){return [0];}else{var _Zt=new T(function(){return _we(_z,_Zs[1]);});return [1,function(_Zu,_){var _Zv=_4S(_Z9,function(_Zw){var _Zx=E(_Zw);return _Zx[0]==0?function(_Zy,_){return [0,[0,_Zt,_Cf],_Zy];}:!_tj(_Zx[1],_Z6)?function(_Zz,_){return [0,[0,_Zt,_Cf],_Zz];}:E(_Zx[2])[0]==0?function(_ZA,_){return [0,[0,function(_ZB,_){var _ZC=A(_Zt,[_ZB,_]),_ZD=A(_1g,[_1m,_ZC,_DH,_Zf,_]);return _ZC;},_Cf],_ZA];}:function(_ZE,_){return [0,[0,_Zt,_Cf],_ZE];};},_Zu,_),_ZF=E(_Zv),_ZG=E(_ZF[1]);return [0,[0,new T(function(){return _Zh(_11,_ZG[1]);}),_ZG[2]],_ZF[2]];},new T(function(){return _Zq(_Zs[2]);})];}},_ZH=function(_ZI,_ZJ){while(1){var _ZK=(function(_ZL,_ZM){var _ZN=E(_ZM);if(!_ZN[0]){return E(_ZL);}else{_ZI=function(_ZO,_){var _ZP=A(_ZL,[_ZO,_]),_ZQ=E(_ZP),_ZR=E(_ZQ[1]),_ZS=A(_ZN[1],[_ZQ[2],_]),_ZT=E(_ZS),_ZU=E(_ZT[1]);return [0,[0,function(_ZV,_){var _ZW=A(_ZR[1],[_ZV,_]),_ZX=A(_ZU[1],[_ZV,_]);return _ZV;},new T(function(){var _ZY=E(_ZR[2]);return _ZY[0]==0?E(_ZU[2]):E(_ZY);})],_ZT[2]];};_ZJ=_ZN[2];return null;}})(_ZI,_ZJ);if(_ZK!=null){return _ZK;}}},_ZZ=function(_100,_101,_){return _4S(_VC,function(_102){var _103=E(E(_102)[2]);return _103[0]==3?E(E(_103[1])[1])==13?function(_Cm,_){return _4S(_YK,function(_104){return function(_Cm,_){return _4S(_YT,function(_105){var _106=new T(function(){return _ZH(_Z3,_Zq([1,_100,_105]));});return function(_ah,_A5){return _4S(function(_Cm,_){return _4S(_Cd,function(_107){return function(_108,_){return [0,_YX,new T(function(){var _109=E(_107);return [0,_109[1],_109[2],_109[3],_109[4],_109[5],new T(function(){return _C0(I_fromBits([3561938990,657451105]),I_fromBits([3021302870,108592267]),_Xl,_g,[1,_100,_105],_109[6]);})];})];};},_Cm,_);},function(_10a,_Cm,_){return (function(_Cm,_){return _4S(function(_Cm,_){return _Xn(_Z5,_Xm,_106,_Cm,_);},_YZ,_Cm,_);})(_Cm,_);},_ah,_A5);};},_Cm,_);};},_Cm,_);}:E(_XN):E(_XQ);},_101,_);},_10b=new T(function(){return A(E(_YI)[1],[_9]);}),_10c=new T(function(){return _tU(_10b,_xC);}),_10d=unCStr("todos"),_10e=new T(function(){return _WH(_z,_10d);}),_10f=new T(function(){return _N(_11,_Z);}),_10g=function(_10h,_){var _10i=_4S(_10c,_ZZ,_10h,_),_10j=E(_10i),_10k=E(_10j[1]),_10l=new T(function(){return _z8(_11,function(_10m,_){var _10n=A(_10e,[_10m,_]),_10o=A(_10k[1],[_10m,_]);return _10m;});});return [0,[0,function(_10p,_){var _10q=A(_10l,[_10p,_]),_10r=A(_10f,[_10p,_]),_10s=A(_1g,[_1m,_10r,_K0,_Z5,_]);return _10p;},new T(function(){var _10t=E(_10k[2]);return _10t[0]==0?E(_Cf):E(_10t);})],_10j[2]];},_10u=function(_10v,_10w,_){return [0,[0,_Z,[1,[1,_10v]]],_10w];},_10x=unCStr("revEntry"),_10y=new T(function(){var _10z=_Yj(_HW,_Fd,_Fc,_10x);return [0,_10z[1],_10z[2],_10z[3]];}),_10A=new T(function(){return A(E(_10y)[1],[_9]);}),_10B=new T(function(){return _tU(_10A,_xC);}),_10C=function(_10D,_10E,_){return [0,[0,_Z,[1,[0,_10D]]],_10E];},_10F=unCStr("entry"),_10G=new T(function(){var _10H=_Yj(_HW,_Fd,_Fc,_10F);return [0,_10H[1],_10H[2],_10H[3]];}),_10I=new T(function(){return A(E(_10G)[1],[_9]);}),_10J=new T(function(){return _tU(_10I,_xC);}),_10K=function(_10L,_){var _10M=_4S(_10J,_10C,_10L,_),_10N=E(_10M),_10O=E(_10N[1]),_10P=_4S(_10B,_10u,_10N[2],_),_10Q=E(_10P),_10R=E(_10Q[1]);return [0,[0,new T(function(){return _z8(_11,function(_10S,_){var _10T=A(_10O[1],[_10S,_]),_10U=_G(_10S,_),_10V=A(_10R[1],[_10S,_]);return _10S;});}),new T(function(){var _10W=E(_10O[2]);return _10W[0]==0?E(_10R[2]):E(_10W);})],_10Q[2]];},_10X=unCStr("To search palindromes: one box present the other\'s reversed. It is also an example of cell usage"),_10Y=new T(function(){return _w1(_z,_10X);}),_10Z=function(_110){var _111=A(E(_10y)[2],[_110]);return function(_112,_){var _113=A(_111,[_]);return [0,[0,_Z,[1,_113]],_112];};},_114=function(_115,_116){while(1){var _117=E(_115);if(!_117[0]){return E(_116);}else{_115=_117[2];var _118=[1,_117[1],_116];_116=_118;continue;}}},_119=function(_11a){var _11b=new T(function(){return _114(_11a,_g);});return function(_11c,_){return [0,[0,_Z,[1,_11b]],_11c];};},_11d=new T(function(){var _11e=E(E(_10G)[3]);return function(_11f,_){var _11g=A(_11e,[_]);return [0,[0,_Z,[1,_11g]],_11f];};}),_11h=function(_Cm,_){return _4S(_11d,_119,_Cm,_);},_11i=function(_Cm,_){return _4S(_11h,_10Z,_Cm,_);},_11j=function(_11k){var _11l=A(E(_10G)[2],[_11k]);return function(_11m,_){var _11n=A(_11l,[_]);return [0,[0,_Z,[1,_11n]],_11m];};},_11o=new T(function(){var _11p=E(E(_10y)[3]);return function(_11q,_){var _11r=A(_11p,[_]);return [0,[0,_Z,[1,_11r]],_11q];};}),_11s=function(_11t){var _11u=new T(function(){return _114(_11t,_g);});return function(_11v,_){return [0,[0,_Z,[1,_11u]],_11v];};},_11w=function(_Cm,_){return _4S(_11o,_11s,_Cm,_);},_11x=function(_Cm,_){return _4S(_11w,_11j,_Cm,_);},_11y=function(_11z){return E(_11z)[0]==0?E(_11i):E(_11x);},_11A=function(_11B,_){var _11C=_4S(_10K,_11y,_11B,_),_11D=E(_11C),_11E=E(_11D[1]);return [0,[0,function(_11F,_){var _11G=A(_10Y,[_11F,_]),_11H=A(_11E[1],[_11F,_]);return _11F;},_11E[2]],_11D[2]];},_11I=unCStr("This widget sum recursively n numbers, but remember the previos entries when one entry is edited"),_11J=new T(function(){return _w1(_z,_11I);}),_11K=[0,_Z,_9],_11L=function(_11M,_){return [0,_11K,_11M];},_11N=function(_11O,_11P,_11Q){var _11R=E(_11O),_11S=_11R[1],_11T=_11R[2],_11U=_11R[3],_11V=_11R[4],_11W=E(_11Q);if(!_11W[0]){var _11X=_11W[2],_11Y=_11W[3],_11Z=_11W[4],_120=_11W[5];switch(_At(_11R,_11X)){case 0:return _AG(_11X,_11Y,_C0(_11S,_11T,_11U,_11V,_11P,_11Z),_120);case 1:return [0,_11W[1],E(_11R),_11P,E(_11Z),E(_120)];default:return _Bl(_11X,_11Y,_11Z,_C0(_11S,_11T,_11U,_11V,_11P,_120));}}else{return [0,1,E(_11R),_11P,E(_f),E(_f)];}},_121=function(_122,_123,_124){var _125=E(_124);if(!_125[0]){var _126=_125[3],_127=_125[4],_128=_125[5],_129=E(_125[2]),_12a=_129[1];return _122>=_12a?_122!=_12a?_Bl(_129,_126,_127,_121(_122,_123,_128)):[0,_125[1],E([0,_122]),_123,E(_127),E(_128)]:_AG(_129,_126,_121(_122,_123,_127),_128);}else{return [0,1,E([0,_122]),_123,E(_f),E(_f)];}},_12b=function(_12c,_12d,_12e){var _12f=E(_12c),_12g=_12f[1],_12h=E(_12e);if(!_12h[0]){var _12i=_12h[3],_12j=_12h[4],_12k=_12h[5],_12l=E(_12h[2]),_12m=_12l[1];return _12g>=_12m?_12g!=_12m?_Bl(_12l,_12i,_12j,_121(_12g,_12d,_12k)):[0,_12h[1],E(_12f),_12d,E(_12j),E(_12k)]:_AG(_12l,_12i,_121(_12g,_12d,_12j),_12k);}else{return [0,1,E(_12f),_12d,E(_f),E(_f)];}},_12n=function(_12o,_12p){while(1){var _12q=E(_12p);if(!_12q[0]){var _12r=E(_12q[2])[1];if(_12o>=_12r){if(_12o!=_12r){_12p=_12q[5];continue;}else{return [1,_12q[3]];}}else{_12p=_12q[4];continue;}}else{return [0];}}},_12s=unCStr("containers-0.5.5.1"),_12t=unCStr("Data.Map.Base"),_12u=unCStr("Map"),_12v=[0,I_fromBits([2800860092,98171937]),I_fromBits([2262449324,1391410843]),_12s,_12t,_12u],_12w=[0,I_fromBits([2800860092,98171937]),I_fromBits([2262449324,1391410843]),_12v,_g],_12x=function(_12y){return E(_12w);},_12z=function(_12A){var _12B=E(_12A);if(!_12B[0]){return [0];}else{var _12C=E(_12B[1]);return [1,[0,_12C[1],_12C[2]],new T(function(){return _12z(_12B[2]);})];}},_12D=function(_12E,_12F){return function(_12G){return E(new T(function(){var _12H=A(_12E,[_6u]),_12I=E(_12H[3]),_12J=_12I[1],_12K=_12I[2],_12L=_2l(_12H[4],[1,new T(function(){return A(_12F,[_6u]);}),_g]);if(!_12L[0]){return [0,_12J,_12K,_12I,_g];}else{var _12M=_5Z(new T(function(){return _5N(_6b(_6m,[1,[0,_12J,_12K],new T(function(){return _12z(_12L);})]));}));return [0,_12M[1],_12M[2],_12I,_12L];}}));};},_12N=new T(function(){return _12D(_12x,_yu);}),_12O=new T(function(){return _6v(_12N,_yu);}),_12P=new T(function(){return _CJ(_1I,_4a,_1G,_12O);}),_12Q=function(_12R,_){var _12S=A(_12P,[_12R,_]);return [0,[0,_Z,new T(function(){return E(E(_12S)[1]);})],new T(function(){return E(E(_12S)[2]);})];},_12T=new T(function(){return _6v(_12N,_yu);}),_12U=[1,_f],_12V=new T(function(){return _CJ(_1I,_4a,_1G,_12T);}),_12W=function(_12X,_){var _12Y=A(_12V,[_12X,_]);return [0,[0,_zh,new T(function(){var _12Z=E(E(_12Y)[1]);return _12Z[0]==0?E(_12U):E(_12Z);})],new T(function(){return E(E(_12Y)[2]);})];},_130=[0,_Z,_wn],_131=[1,_9],_132=function(_133,_134){var _135=new T(function(){return [0,E(_133)[1]+1|0];});return function(_ah,_A5){return _4S(function(_Cm,_){return _4S(function(_136,_){var _137=_4S(_12Q,function(_138){var _139=_12n(E(_133)[1],_138);return _139[0]==0?E(_11L):function(_13a,_){return [0,[0,_Z,_139],_13a];};},_136,_),_13b=E(_137),_13c=E(_13b[1]);return [0,[0,function(_13d,_){var _13e=A(_13c[1],[_13d,_]);return _13d;},new T(function(){var _13f=E(_13c[2]);return _13f[0]==0?E(_131):[1,_13f];})],_13b[2]];},function(_13g){var _13h=new T(function(){return _tU(new T(function(){return A(_yw,[_9,_sC,_13g]);}),_xC);});return function(_ah,_A5){return _4S(function(_13i,_){var _13j=A(_13h,[_13i,_]),_13k=E(_13j),_13l=_13k[2],_13m=E(_13k[1]),_13n=_13m[1],_13o=_13m[2],_13p=E(_13g);return _13p[0]==0?[0,[0,function(_13q,_){var _13r=A(_13n,[_13q,_]);return _13q;},_13o],_13l]:[0,[0,function(_13s,_){var _13t=A(_13n,[_13s,_]);return _13s;},new T(function(){var _13u=E(_13o);return _13u[0]==0?E(_13p):E(_13u);})],_13l];},function(_13v,_13w,_){return _4S(function(_Cm,_){return _4S(_12W,function(_13x){var _13y=new T(function(){return _12b(_133,_13v,_13x);}),_13z=new T(function(){return A(_12T,[_13y]);});return function(_ah,_A5){return _4S(_Cd,function(_13A){return function(_13B,_){return [0,_130,new T(function(){var _13C=E(_13A);return [0,_13C[1],_13C[2],_13C[3],_13C[4],_13C[5],new T(function(){return _11N(_13z,_13y,_13C[6]);})];})];};},_ah,_A5);};},_Cm,_);},function(_13D,_Cm,_){return (function(_13E,_){return [0,[0,_Z,[1,_13v]],_13E];})(_Cm,_);},_13w,_);},_ah,_A5);};},_Cm,_);},function(_13F){var _13G=new T(function(){return _132(_135,new T(function(){return _wR(_134,_13F);}));}),_13H=new T(function(){return _we(_z,new T(function(){return _4i(0,E(_134)[1]+E(_13F)[1]|0,_g);}));});return function(_ah,_A5){return _4S(function(_13I,_){return [0,[0,function(_13J,_){var _13K=A(_13H,[_13J,_]),_13L=_G(_13J,_);return _13J;},_wn],_13I];},function(_13M){return E(_13G);},_ah,_A5);};},_ah,_A5);};},_13N=new T(function(){return _132(_wy,_wy);}),_13O=unCStr("This widget sum recursively n numbers. When enters 0, present the result"),_13P=new T(function(){return _w1(_z,_13O);}),_13Q=new T(function(){return A(_yw,[_9,_sC,_9]);}),_13R=new T(function(){return _tU(_13Q,_xC);}),_13S=function(_13T){var _13U=new T(function(){return _we(_z,new T(function(){return _wa(_13T);}));});return function(_ah,_A5){return _4S(_13R,function(_13V){var _13W=E(E(_13V)[1]);if(!_13W){return function(_13X,_){return [0,[0,function(_13Y,_){var _13Z=_G(_13Y,_),_140=_z(_wo,_13Y,_),_141=A(_13U,[_13Y,_]);return _13Y;},_9],_13X];};}else{var _142=new T(function(){return _13S(new T(function(){return [0,E(_13T)[1]+_13W|0];}));}),_143=new T(function(){return _we(_z,new T(function(){return _4i(0,E(_13T)[1]+_13W|0,_g);}));});return function(_ah,_A5){return _4S(function(_144,_){return [0,[0,function(_145,_){var _146=A(_143,[_145,_]),_147=_G(_145,_);return _145;},_wn],_144];},function(_148){return E(_142);},_ah,_A5);};}},_ah,_A5);};},_149=new T(function(){return _13S(_wy);}),_14a=unCStr("This widget sum two numbers and append the result. Using applicative and monadic expressions"),_14b=new T(function(){return _w1(_z,_14a);}),_14c=function(_14d){return function(_14e,_){return [0,[0,new T(function(){var _14f=new T(function(){return _we(_z,new T(function(){return _wa(_14d);}));});return _w1(_11,function(_14g,_){var _14h=_z(_wo,_14g,_),_14i=A(_14f,[_14g,_]);return _14g;});}),_wn],_14e];};},_14j=new T(function(){return A(_yw,[_9,_sC,_9]);}),_14k=new T(function(){return _tU(_14j,_xC);}),_14l=unCStr("second number "),_14m=unCStr("first number"),_14n=new T(function(){return A(_yw,[_9,_sC,_9]);}),_14o=new T(function(){return _tU(_14n,_xC);}),_14p=function(_14q,_){var _14r=A(_14k,[_14q,_]),_14s=E(_14r),_14t=E(_14s[1]),_14u=A(_14o,[_14s[2],_]),_14v=E(_14u),_14w=E(_14v[1]);return [0,[0,function(_14x,_){var _14y=_z(_14m,_14x,_),_14z=_G(_14x,_),_14A=A(_14t[1],[_14x,_]),_14B=_G(_14x,_),_14C=_z(_14l,_14x,_),_14D=_G(_14x,_),_14E=A(_14w[1],[_14x,_]),_14F=_G(_14x,_);return _14x;},new T(function(){var _14G=E(_14t[2]);if(!_14G[0]){return [0];}else{var _14H=E(_14w[2]);return _14H[0]==0?[0]:[1,new T(function(){return _wR(_14G[1],_14H[1]);})];}})],_14v[2]];},_14I=function(_14J,_){var _14K=_4S(_14p,_14c,_14J,_),_14L=E(_14K),_14M=E(_14L[1]),_14N=new T(function(){return _w1(_11,_14M[1]);});return [0,[0,function(_14O,_){var _14P=A(_14b,[_14O,_]),_14Q=A(_14N,[_14O,_]);return _14O;},_14M[2]],_14L[2]];},_14R=unCStr("table"),_14S=function(_14T,_14U){var _14V=new T(function(){return A(_14T,[_14U]);});return function(_14W,_){var _14X=jsCreateElem(toJSStr(E(_14R))),_14Y=jsAppendChild(_14X,E(_14W)[1]),_14Z=[0,_14X],_150=A(_14V,[_14Z,_]);return _14Z;};},_151=unCStr("hplayground examples"),_152=new T(function(){return _WH(_z,_151);}),_153=unCStr("td"),_154=function(_155,_156){var _157=new T(function(){return A(_155,[_156]);});return function(_158,_){var _159=jsCreateElem(toJSStr(E(_153))),_15a=jsAppendChild(_159,E(_158)[1]),_15b=[0,_159],_15c=A(_157,[_15b,_]);return _15b;};},_15d=unCStr("tr"),_15e=function(_15f,_15g){var _15h=new T(function(){return A(_15f,[_15g]);});return function(_15i,_){var _15j=jsCreateElem(toJSStr(E(_15d))),_15k=jsAppendChild(_15j,E(_15i)[1]),_15l=[0,_15j],_15m=A(_15h,[_15l,_]);return _15l;};},_15n=unCStr("bottom of the page"),_15o=new T(function(){return _we(_z,_15n);}),_15p=unCStr("h3"),_15q=function(_15r,_15s){var _15t=new T(function(){return A(_15r,[_15s]);});return function(_15u,_){var _15v=jsCreateElem(toJSStr(E(_15p))),_15w=jsAppendChild(_15v,E(_15u)[1]),_15x=[0,_15v],_15y=A(_15t,[_15x,_]);return _15x;};},_15z=unCStr("https://github.com/agocorona/hplayground"),_15A=unCStr("   "),_15B=unCStr("https://github.com/agocorona/hplayground/blob/master/src/Main.hs"),_15C=unCStr("haskell-web.blogspot.com.es/2014/07/hplayground-translate-your-console.html"),_15D=unCStr("Git repository"),_15E=new T(function(){return _Sh(_z,_15D);}),_15F=unCStr("Examples code"),_15G=new T(function(){return _Sh(_z,_15F);}),_15H=unCStr("Article"),_15I=new T(function(){return _Sh(_z,_15H);}),_15J=function(_15K,_){var _15L=A(_15E,[_15K,_]),_15M=A(_1g,[_1m,_15L,_Ss,_15z,_]),_15N=_z(_15A,_15K,_),_15O=A(_15G,[_15K,_]),_15P=A(_1g,[_1m,_15O,_Ss,_15B,_]),_15Q=_z(_15A,_15K,_),_15R=A(_15I,[_15K,_]),_15S=A(_1g,[_1m,_15R,_Ss,_15C,_]);return _15K;},_15T=new T(function(){return _z8(_11,_15J);}),_15U=new T(function(){return _15q(_11,_15T);}),_15V=function(_15W,_){var _15X=_14I(_15W,_),_15Y=E(_15X),_15Z=E(_15Y[1]),_160=A(_z6,[_15Y[2],_]),_161=E(_160),_162=E(_161[1]),_163=A(_149,[_161[2],_]),_164=E(_163),_165=E(_164[1]),_166=A(_Dl,[_164[2],_]),_167=E(_166),_168=E(_167[1]),_169=_Jh(_167[2],_),_16a=E(_169),_16b=E(_16a[1]),_16c=_4S(_Vr,_Uv,_16a[2],_),_16d=E(_16c),_16e=E(_16d[1]),_16f=A(_13N,[_16d[2],_]),_16g=E(_16f),_16h=E(_16g[1]),_16i=A(_E2,[_16g[2],_]),_16j=E(_16i),_16k=E(_16j[1]),_16l=_SB(_16j[2],_),_16m=E(_16l),_16n=E(_16m[1]),_16o=_11A(_16m[2],_),_16p=E(_16o),_16q=E(_16p[1]),_16r=_10g(_16p[2],_),_16s=E(_16r),_16t=E(_16s[1]),_16u=_O9(_16s[2],_),_16v=E(_16u),_16w=E(_16v[1]),_16x=_TP(_16v[2],_),_16y=E(_16x),_16z=E(_16y[1]),_16A=_4S(_X9,_Wv,_16y[2],_),_16B=E(_16A),_16C=E(_16B[1]),_16D=new T(function(){return _14S(_11,function(_16E,_){var _16F=A(new T(function(){var _16G=new T(function(){return _154(_11,function(_16H,_){var _16I=A(_13P,[_16H,_]),_16J=A(_165[1],[_16H,_]);return _16H;});}),_16K=new T(function(){return _154(_11,_162[1]);}),_16L=new T(function(){return _154(_11,_15Z[1]);});return _15e(_11,function(_16M,_){var _16N=A(_16L,[_16M,_]),_16O=A(_1g,[_1m,_16N,_DH,_vV,_]),_16P=A(_16K,[_16M,_]),_16Q=A(_1g,[_1m,_16P,_DH,_vV,_]),_16R=A(_16G,[_16M,_]),_16S=A(_1g,[_1m,_16R,_DH,_vV,_]);return _16M;});}),[_16E,_]),_16T=A(_1g,[_1m,_16F,_DH,_vX,_]),_16U=A(new T(function(){var _16V=new T(function(){return _154(_11,_16k[1]);}),_16W=new T(function(){return _154(_11,function(_16X,_){var _16Y=A(_11J,[_16X,_]),_16Z=A(_16h[1],[_16X,_]);return _16X;});}),_170=new T(function(){return _154(_11,function(_171,_){var _172=A(_168[1],[_171,_]),_173=A(_16b[1],[_171,_]),_174=A(_16e[1],[_171,_]);return _171;});});return _15e(_11,function(_175,_){var _176=A(_170,[_175,_]),_177=A(_1g,[_1m,_176,_DH,_vV,_]),_178=A(_16W,[_175,_]),_179=A(_1g,[_1m,_178,_DH,_vV,_]),_17a=A(_16V,[_175,_]),_17b=A(_1g,[_1m,_17a,_DH,_vV,_]);return _175;});}),[_16E,_]),_17c=A(_1g,[_1m,_16U,_DH,_vX,_]),_17d=A(new T(function(){var _17e=new T(function(){return _154(_11,function(_17f,_){var _17g=A(_Xj,[_17f,_]),_17h=A(_16t[1],[_17f,_]);return _17f;});}),_17i=new T(function(){return _154(_11,_16q[1]);}),_17j=new T(function(){return _154(_11,new T(function(){return _z8(_11,_16n[1]);}));});return _15e(_11,function(_17k,_){var _17l=A(_17j,[_17k,_]),_17m=A(_1g,[_1m,_17l,_DH,_vV,_]),_17n=A(_17i,[_17k,_]),_17o=A(_1g,[_1m,_17n,_DH,_vV,_]),_17p=A(_17e,[_17k,_]),_17q=A(_1g,[_1m,_17p,_DH,_vV,_]);return _17k;});}),[_16E,_]),_17r=A(_1g,[_1m,_17d,_DH,_vX,_]),_17s=A(new T(function(){var _17t=new T(function(){return _154(_11,_16C[1]);}),_17u=new T(function(){return _154(_11,_16z[1]);}),_17v=new T(function(){return _154(_11,_16w[1]);});return _15e(_11,function(_17w,_){var _17x=A(_17v,[_17w,_]),_17y=A(_1g,[_1m,_17x,_DH,_vV,_]),_17z=A(_17u,[_17w,_]),_17A=A(_1g,[_1m,_17z,_DH,_vV,_]),_17B=A(_17t,[_17w,_]),_17C=A(_1g,[_1m,_17B,_DH,_vV,_]);return _17w;});}),[_16E,_]),_17D=A(_1g,[_1m,_17s,_DH,_vX,_]);return _16E;});});return [0,[0,function(_17E,_){var _17F=A(_152,[_17E,_]),_17G=A(_1g,[_1m,_17F,_DH,_DG,_]),_17H=A(_15U,[_17E,_]),_17I=A(_16D,[_17E,_]),_17J=A(_1g,[_1m,_17I,_DH,_vW,_]),_17K=A(_15o,[_17E,_]);return _17E;},new T(function(){var _17L=E(_15Z[2]);if(!_17L[0]){var _17M=E(_162[2]);if(!_17M[0]){var _17N=E(_165[2]);if(!_17N[0]){var _17O=E(_168[2]);if(!_17O[0]){var _17P=E(_16b[2]);if(!_17P[0]){var _17Q=E(_16e[2]);if(!_17Q[0]){var _17R=E(_16h[2]);if(!_17R[0]){var _17S=E(_16k[2]);if(!_17S[0]){var _17T=E(_16n[2]);if(!_17T[0]){var _17U=E(_16q[2]);if(!_17U[0]){var _17V=E(_16t[2]);if(!_17V[0]){var _17W=E(_16w[2]);if(!_17W[0]){var _17X=E(_16z[2]);return _17X[0]==0?E(_16C[2]):E(_17X);}else{return E(_17W);}}else{return E(_17V);}}else{return E(_17U);}}else{return E(_17T);}}else{return E(_17S);}}else{return E(_17R);}}else{return E(_17Q);}}else{return E(_17P);}}else{return E(_17O);}}else{return E(_17N);}}else{return E(_17M);}}else{return E(_17L);}})],_16B[2]];},_17Y=new T(function(){return [0,"(function(){return document.body;})"];}),_17Z=new T(function(){return _5(_17Y);}),_180=function(_){var _181=_vN(_),_182=A(_17Z,[_]);return _l(_15V,[0,_182],_);},_183=function(_){return _180(_);};
+var hasteMain = function() {A(_183, [0]);};window.onload = hasteMain;</script></head><body></body></html>