push 3 sub projects
This commit is contained in:
34
server/.gitignore
vendored
Normal file
34
server/.gitignore
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# haskell
|
||||||
|
.stack-work/
|
||||||
|
dist-newstyle/
|
||||||
|
cabal.project.local
|
||||||
|
.ghc.environment.*
|
||||||
|
dist
|
||||||
|
*.o
|
||||||
|
*.hi
|
||||||
|
*.jsexe
|
||||||
|
|
||||||
|
# nix
|
||||||
|
result*
|
||||||
|
|
||||||
|
# emacs
|
||||||
|
*~
|
||||||
|
|
||||||
|
# darwin
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# misc
|
||||||
|
TAGS
|
||||||
|
tags
|
||||||
|
.direnv
|
||||||
|
|
||||||
|
# js
|
||||||
|
package-lock.json
|
||||||
|
node_modules/
|
||||||
|
coverage/
|
||||||
|
|
||||||
|
# typescript
|
||||||
|
*.js
|
||||||
|
|
||||||
|
# haddocks
|
||||||
|
haddocks/
|
||||||
62
server/Main.hs
Normal file
62
server/Main.hs
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
----------------------------------------------------------------------------
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
{-# LANGUAGE RecordWildCards #-}
|
||||||
|
{-# LANGUAGE LambdaCase #-}
|
||||||
|
{-# LANGUAGE CPP #-}
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
module Main where
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
import Miso
|
||||||
|
import Miso.String
|
||||||
|
import Miso.Lens
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
-- | Component model state
|
||||||
|
newtype Model = Model
|
||||||
|
{ _counter :: Int
|
||||||
|
} deriving (Show, Eq)
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
counter :: Lens Model Int
|
||||||
|
counter = lens _counter $ \record field -> record { _counter = field }
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
-- | Sum type for Component events
|
||||||
|
data Action
|
||||||
|
= AddOne
|
||||||
|
| SubtractOne
|
||||||
|
| SayHelloWorld
|
||||||
|
deriving (Show, Eq)
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
-- | Entry point for a miso application
|
||||||
|
main :: IO ()
|
||||||
|
main = run (startComponent component)
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
-- | WASM export, required when compiling w/ the WASM backend.
|
||||||
|
#ifdef WASM
|
||||||
|
foreign export javascript "hs_start" main :: IO ()
|
||||||
|
#endif
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
-- | `defaultComponent` takes as arguments the initial model, update function, view function
|
||||||
|
component :: Component name Model Action
|
||||||
|
component = defaultComponent emptyModel updateModel viewModel
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
-- | Empty application state
|
||||||
|
emptyModel :: Model
|
||||||
|
emptyModel = Model 0
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
-- | Updates model, optionally introduces side effects
|
||||||
|
updateModel :: Action -> Effect Model Action
|
||||||
|
updateModel = \case
|
||||||
|
AddOne -> counter += 1
|
||||||
|
SubtractOne -> counter -= 1
|
||||||
|
SayHelloWorld -> io_ $ do
|
||||||
|
consoleLog "Hello World"
|
||||||
|
alert "Hello World"
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
-- | Constructs a virtual DOM from a model
|
||||||
|
viewModel :: Model -> View Action
|
||||||
|
viewModel x = div_ []
|
||||||
|
[ button_ [ onClick AddOne ] [ text "+" ]
|
||||||
|
, text $ ms (x ^. counter)
|
||||||
|
, button_ [ onClick SubtractOne ] [ text "-" ]
|
||||||
|
, button_ [ onClick SayHelloWorld ] [ text "Alert Hello World!" ]
|
||||||
|
]
|
||||||
|
----------------------------------------------------------------------------
|
||||||
24
server/app.cabal
Normal file
24
server/app.cabal
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
cabal-version: 2.2
|
||||||
|
name: app
|
||||||
|
version: 0.1.0.0
|
||||||
|
synopsis: Sample miso app
|
||||||
|
category: Web
|
||||||
|
|
||||||
|
common wasm
|
||||||
|
if arch(wasm32)
|
||||||
|
ghc-options:
|
||||||
|
-no-hs-main
|
||||||
|
-optl-mexec-model=reactor
|
||||||
|
"-optl-Wl,--export=hs_start"
|
||||||
|
cpp-options:
|
||||||
|
-DWASM
|
||||||
|
|
||||||
|
executable app
|
||||||
|
import:
|
||||||
|
wasm
|
||||||
|
main-is:
|
||||||
|
Main.hs
|
||||||
|
build-depends:
|
||||||
|
base, miso
|
||||||
|
default-language:
|
||||||
|
Haskell2010
|
||||||
7
server/cabal.project
Normal file
7
server/cabal.project
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
packages:
|
||||||
|
.
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/dmjio/miso
|
||||||
|
branch: master
|
||||||
Reference in New Issue
Block a user