integrated haskell backend with elm-street
This commit is contained in:
parent
c86f613ccc
commit
d6d84423e0
12 changed files with 573 additions and 273 deletions
|
@ -1,7 +1,8 @@
|
|||
{-# LANGUAGE DeriveGeneric #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
module Main (main) where
|
||||
|
||||
import Lib
|
||||
import ElmskellTypes
|
||||
import Data.Text.Lazy (Text)
|
||||
import Network.Wai.Handler.Warp (Port)
|
||||
import Network.Wai.Middleware.RequestLogger (logStdoutDev)
|
||||
|
@ -46,6 +47,9 @@ assetsFolder = "/home/mtgmonkey/elmskell/assets"
|
|||
-- MAIN
|
||||
main :: IO ()
|
||||
main = do
|
||||
|
||||
generateElmskellTypes
|
||||
|
||||
compiledElmAppOrExc <- E.try $ readFile $ assetsFolder ++ compiledElmAppFile :: IO (Either E.IOException String)
|
||||
let compiledElmApp = case compiledElmAppOrExc of
|
||||
Left e -> serverErrorReadFile e
|
||||
|
|
|
@ -28,11 +28,12 @@ library
|
|||
src
|
||||
ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints
|
||||
build-depends:
|
||||
base >=4.19.2 && <4.20
|
||||
aeson >=2.2.3 && <2.3
|
||||
, base >=4.19.2 && <4.20
|
||||
, blaze-html >=0.9.2 && <0.10
|
||||
, blaze-markup >=0.8.3 && <0.9
|
||||
, directory >=1.3.8 && <1.4
|
||||
, elm-bridge >=0.8.4 && <0.9
|
||||
, elm-street >=0.2.2 && <0.3
|
||||
, http-types >=0.12.4 && <0.13
|
||||
, scotty ==0.22.*
|
||||
, text >=2.1.1 && <2.2
|
||||
|
@ -50,11 +51,12 @@ executable hs-server-exe
|
|||
app
|
||||
ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N
|
||||
build-depends:
|
||||
base >=4.19.2 && <4.20
|
||||
aeson >=2.2.3 && <2.3
|
||||
, base >=4.19.2 && <4.20
|
||||
, blaze-html >=0.9.2 && <0.10
|
||||
, blaze-markup >=0.8.3 && <0.9
|
||||
, directory >=1.3.8 && <1.4
|
||||
, elm-bridge >=0.8.4 && <0.9
|
||||
, elm-street >=0.2.2 && <0.3
|
||||
, hs-server
|
||||
, http-types >=0.12.4 && <0.13
|
||||
, scotty ==0.22.*
|
||||
|
@ -74,11 +76,12 @@ test-suite hs-server-test
|
|||
test
|
||||
ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N
|
||||
build-depends:
|
||||
base >=4.19.2 && <4.20
|
||||
aeson >=2.2.3 && <2.3
|
||||
, base >=4.19.2 && <4.20
|
||||
, blaze-html >=0.9.2 && <0.10
|
||||
, blaze-markup >=0.8.3 && <0.9
|
||||
, directory >=1.3.8 && <1.4
|
||||
, elm-bridge >=0.8.4 && <0.9
|
||||
, elm-street >=0.2.2 && <0.3
|
||||
, hs-server
|
||||
, http-types >=0.12.4 && <0.13
|
||||
, scotty ==0.22.*
|
||||
|
|
|
@ -19,10 +19,12 @@ extra-source-files:
|
|||
description: Please see README.md
|
||||
|
||||
dependencies:
|
||||
- aeson >= 2.2.3 && < 2.3
|
||||
- base >= 4.19.2 && < 4.20
|
||||
- blaze-html >= 0.9.2 && < 0.10
|
||||
- blaze-markup >= 0.8.3 && < 0.9
|
||||
- directory >= 1.3.8 && < 1.4
|
||||
- elm-street >= 0.2.2 && < 0.3
|
||||
- http-types >= 0.12.4 && < 0.13
|
||||
- scotty >= 0.22 && < 0.23
|
||||
- text >= 2.1.1 && < 2.2
|
||||
|
|
|
@ -1,20 +1,106 @@
|
|||
{-# LANGUAGE TemplateHaskell #-}
|
||||
{-# LANGUAGE DataKinds #-}
|
||||
{-# LANGUAGE DeriveGeneric #-}
|
||||
{-# LANGUAGE DerivingStrategies #-}
|
||||
{-# LANGUAGE DerivingVia #-}
|
||||
{-# LANGUAGE TypeApplications #-}
|
||||
|
||||
module ElmskellTypes
|
||||
module ElmskellTypes (generateElmskellTypes) where
|
||||
|
||||
import Elm.Derive
|
||||
import Elm.Module
|
||||
import Data.Aeson (ToJSON (..), FromJSON (..))
|
||||
import Elm
|
||||
import GHC.Generics
|
||||
|
||||
data Foo
|
||||
= Foo
|
||||
{ name :: String
|
||||
, blablub :: Int
|
||||
} deriving (Show, Eq)
|
||||
data Font = Font
|
||||
{ fontFontSize :: Float
|
||||
} deriving (Generic)
|
||||
deriving (Elm, ToJSON, FromJSON) via ElmStreet Font
|
||||
|
||||
deriveBoth defaultOptions ''Foo
|
||||
data Cookies = Cookies
|
||||
{ cookiesFont :: Font
|
||||
, cookiesCookiesKept :: CookiesKept
|
||||
, cookiesTheme :: Theme
|
||||
, cookiesPrompt :: Prompt
|
||||
} deriving (Generic)
|
||||
deriving (Elm, ToJSON, FromJSON) via ElmStreet Cookies
|
||||
|
||||
main :: IO ()
|
||||
main =
|
||||
putStrLn $ makeElmModule "Foo"
|
||||
[ DefineElm (Proxy :: Proxy Foo)
|
||||
data Theme
|
||||
= Pit
|
||||
| Dim
|
||||
| Sky
|
||||
| Sun
|
||||
deriving (Generic)
|
||||
deriving (Elm, ToJSON, FromJSON) via ElmStreet Theme
|
||||
|
||||
data CookiesKept = CookiesKept
|
||||
{ cookiesKeptKeepTheme :: Bool
|
||||
, cookiesKeptKeepFont :: Bool
|
||||
, cookiesKeptKeepPrompt :: Bool
|
||||
} deriving (Generic)
|
||||
deriving (Elm, ToJSON, FromJSON) via ElmStreet CookiesKept
|
||||
|
||||
data Prompt = Prompt
|
||||
{ promptPrompt :: String
|
||||
} deriving (Generic)
|
||||
deriving (Elm, ToJSON, FromJSON) via ElmStreet Prompt
|
||||
|
||||
data CoreColor
|
||||
= Red
|
||||
| Green
|
||||
| Yellow
|
||||
| Blue
|
||||
| Magenta
|
||||
| Cyan
|
||||
| BrightRed
|
||||
| BrightGreen
|
||||
| BrightYellow
|
||||
| BrightBlue
|
||||
| BrightMagenta
|
||||
| BrightCyan
|
||||
deriving (Generic)
|
||||
deriving (Elm, ToJSON, FromJSON) via ElmStreet CoreColor
|
||||
|
||||
data ThemeColor
|
||||
= Background
|
||||
| Foreground
|
||||
| Cursor
|
||||
| Black
|
||||
| White
|
||||
| BrightBlack
|
||||
| BrightWhite
|
||||
deriving (Generic)
|
||||
deriving (Elm, ToJSON, FromJSON) via ElmStreet ThemeColor
|
||||
|
||||
data Command
|
||||
= HelpCommand
|
||||
| ClearCommand
|
||||
| ColorsCommand
|
||||
| CookiesCommand
|
||||
| FontCommand
|
||||
| HelloCommand
|
||||
| PromptCommand
|
||||
| ThemeCommand
|
||||
| TodoCommand
|
||||
deriving (Generic)
|
||||
deriving (Elm, ToJSON, FromJSON) via ElmStreet Command
|
||||
|
||||
data Input = Input
|
||||
{ inputCommand :: Command
|
||||
, inputArgs :: [String]
|
||||
}
|
||||
deriving (Generic)
|
||||
deriving (Elm, ToJSON, FromJSON) via ElmStreet Input
|
||||
|
||||
type Types =
|
||||
'[Font
|
||||
, Cookies
|
||||
, Theme
|
||||
, CookiesKept
|
||||
, Prompt
|
||||
, CoreColor
|
||||
, ThemeColor
|
||||
, Command
|
||||
, Input
|
||||
]
|
||||
|
||||
generateElmskellTypes :: IO ()
|
||||
generateElmskellTypes = generateElm @Types $ defaultSettings "frontend/src" ["ElmskellTypes", "Generated"]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue