mirror of
https://github.com/monadicsystems/okapi.git
synced 2024-11-22 17:04:17 +03:00
Get started on realword-htmx example app
This commit is contained in:
parent
c8f4457b92
commit
21053c1c4e
3
.ghci
Normal file
3
.ghci
Normal file
@ -0,0 +1,3 @@
|
||||
:set -fwarn-unused-binds -fwarn-unused-imports
|
||||
:set -isrc
|
||||
:load Main
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -2,3 +2,6 @@
|
||||
*~
|
||||
dist-newstyle
|
||||
docs/syntax.zip
|
||||
experimental/stack.yaml
|
||||
experimental/stack.yaml.lock
|
||||
|
||||
|
234
examples/realworld-htmx/Main.hs
Normal file
234
examples/realworld-htmx/Main.hs
Normal file
@ -0,0 +1,234 @@
|
||||
{-# language BlockArguments #-}
|
||||
{-# language ConstraintKinds #-}
|
||||
{-# language DeriveAnyClass #-}
|
||||
{-# language DeriveGeneric #-}
|
||||
{-# language DerivingStrategies #-}
|
||||
{-# language DerivingVia #-}
|
||||
{-# language DuplicateRecordFields #-}
|
||||
{-# language FlexibleContexts #-}
|
||||
{-# language GeneralizedNewtypeDeriving #-}
|
||||
{-# language OverloadedStrings #-}
|
||||
{-# language StandaloneDeriving #-}
|
||||
{-# language TypeApplications #-}
|
||||
{-# language TypeFamilies #-}
|
||||
|
||||
module Main where
|
||||
|
||||
import qualified Control.Monad.Reader as Reader
|
||||
import qualified Control.Monad.IO.Class as IO
|
||||
import qualified Control.Monad.Combinators as Combinators
|
||||
import qualified Data.ByteString as BS
|
||||
import Data.Function ((&))
|
||||
import qualified Hasql.Connection as Hasql
|
||||
import qualified Lucid
|
||||
import Lucid
|
||||
( h1_
|
||||
, head_
|
||||
, html_
|
||||
, meta_
|
||||
, src_
|
||||
, charset_
|
||||
, title_
|
||||
, link_
|
||||
, href_
|
||||
, rel_
|
||||
, type_
|
||||
, script_
|
||||
, li_
|
||||
, ul_
|
||||
, body_
|
||||
, footer_
|
||||
, a_
|
||||
, div_
|
||||
, class_
|
||||
, span_
|
||||
, id_
|
||||
, nav_
|
||||
, p_
|
||||
)
|
||||
import qualified Lucid.Htmx as Htmx
|
||||
import qualified Okapi
|
||||
import qualified Rel8
|
||||
|
||||
newtype App a = App
|
||||
{ unApp :: Reader.ReaderT Hasql.Connection IO a
|
||||
}
|
||||
deriving newtype (Functor, Applicative, Monad, IO.MonadIO, Reader.MonadReader Hasql.Connection)
|
||||
|
||||
type HasDBConnection m = Reader.MonadReader Hasql.Connection m
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
-- Get database connection
|
||||
secret <- BS.readFile "secret.txt"
|
||||
let settings = Hasql.settings "localhost" 5432 "realworld" secret "realworld"
|
||||
Right connection <- Hasql.acquire settings
|
||||
|
||||
-- Run server
|
||||
Okapi.run (executeApp connection) server
|
||||
|
||||
executeApp :: Hasql.Connection -> App a -> IO a
|
||||
executeApp connection (App app) = Reader.runReaderT app connection
|
||||
|
||||
setLucid :: Lucid.Html () -> Okapi.Response -> Okapi.Response
|
||||
setLucid = Okapi.setHTML . Lucid.renderBS
|
||||
|
||||
server :: (Okapi.MonadOkapi m, HasDBConnection m) => m Okapi.Response
|
||||
server = Combinators.choice
|
||||
[ home
|
||||
, signupForm
|
||||
, submitSignupForm
|
||||
, loginForm
|
||||
, submitLoginForm
|
||||
, logout
|
||||
, follow
|
||||
, unfollow
|
||||
]
|
||||
|
||||
-- Home
|
||||
|
||||
home :: (Okapi.MonadOkapi m, HasDBConnection m) => m Okapi.Response
|
||||
home = homeRoute >> homeHandler
|
||||
|
||||
homeRoute :: Okapi.MonadOkapi m => m ()
|
||||
homeRoute = do
|
||||
Okapi.methodGET
|
||||
Okapi.pathEnd
|
||||
|
||||
homeHandler :: HasDBConnection m => m Okapi.Response
|
||||
homeHandler =
|
||||
Okapi.ok
|
||||
& setLucid do
|
||||
wrapHtml do -- TODO: Only wrap if not htmx request
|
||||
div_ [class_ "home-page"] do
|
||||
div_ [class_ "banner"] do
|
||||
div_ [class_ "container"] do
|
||||
h1_ [class_ "logo-font"] "conduit"
|
||||
p_ "A place to share your knowledge."
|
||||
div_ [class_ "container page"] do
|
||||
div_ [class_ "row"] do
|
||||
-- FEED
|
||||
div_ [id_ "feeds", class_ "col-md-9"] do
|
||||
h1_ [] "Empty Feed"
|
||||
-- TAGS
|
||||
div_ [id_ "tags", class_ "col-md-3"] do
|
||||
div_ [class_ "sidebar"] $ do
|
||||
p_ "Popular Tags"
|
||||
div_ [class_ "tag-list"] do
|
||||
a_ [href_ "#", class_ "tag-pill tag-default"] "fake-tag"
|
||||
& return
|
||||
|
||||
emptyHtml :: Lucid.Html ()
|
||||
emptyHtml = ""
|
||||
|
||||
wrapHtml :: Lucid.Html () -> Lucid.Html ()
|
||||
wrapHtml innerHtml =
|
||||
html_ do
|
||||
head_ do
|
||||
meta_ [charset_ "utf-8"]
|
||||
title_ "Conduit"
|
||||
link_ [href_ "//code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css", rel_ "stylesheet", type_ "text/css"]
|
||||
link_ [href_ "//fonts.googleapis.com/css?family=Titillium+Web:700|Source+Serif+Pro:400,700|Merriweather+Sans:400,700|Source+Sans+Pro:400,300,600,700,300italic,400italic,600italic,700italic", rel_ "stylesheet", type_ "text/css"]
|
||||
link_ [rel_ "stylesheet", href_ "//demo.productionready.io/main.css"]
|
||||
script_ [src_ "https://unpkg.com/htmx.org@1.8.0"] emptyHtml
|
||||
body_ do
|
||||
|
||||
nav_ [ id_ "navbar", class_ "navbar navbar-light"] do
|
||||
div_ [class_ "container"] do
|
||||
-- TODO: Does it make sense to use hxGet_ and href_ for boost?
|
||||
a_ [class_ "navbar-brand"] "conduit"
|
||||
ul_ [class_ "nav navbar-nav pull-xs-right"] do
|
||||
li_ [class_ "nav-item"] do
|
||||
a_ [class_ "nav-link"] "Home"
|
||||
li_ [class_ "nav-item"] do
|
||||
a_ [class_ "nav-link"] "Sign in"
|
||||
li_ [class_ "nav-item"] do
|
||||
a_ [class_ "nav-link"] "Sign up"
|
||||
|
||||
div_ [id_ "content-slot"] innerHtml
|
||||
|
||||
footer_ do
|
||||
div_ [class_ "container"] do
|
||||
a_ [href_ "/", class_ "logo-font"] "conduit"
|
||||
span_ [class_ "attribution"] do
|
||||
" An interactive learning project from "
|
||||
a_ [href_ "https://thinkster.io"] "Thinkster"
|
||||
". Code & design licensed under MIT. "
|
||||
|
||||
|
||||
-- Signup Form
|
||||
|
||||
signupForm :: (Okapi.MonadOkapi m, HasDBConnection m) => m Okapi.Response
|
||||
signupForm = signupFormRoute >>= signupFormHandler
|
||||
|
||||
signupFormRoute :: Okapi.MonadOkapi m => m ()
|
||||
signupFormRoute = undefined
|
||||
|
||||
signupFormHandler :: HasDBConnection m => () -> m Okapi.Response
|
||||
signupFormHandler = undefined
|
||||
|
||||
-- Submit Signup Form
|
||||
|
||||
submitSignupForm :: (Okapi.MonadOkapi m, HasDBConnection m) => m Okapi.Response
|
||||
submitSignupForm = submitSignupFormRoute >>= submitSignupFormHandler
|
||||
|
||||
submitSignupFormRoute :: Okapi.MonadOkapi m => m ()
|
||||
submitSignupFormRoute = undefined
|
||||
|
||||
submitSignupFormHandler :: HasDBConnection m => () -> m Okapi.Response
|
||||
submitSignupFormHandler = undefined
|
||||
|
||||
-- Login Form
|
||||
|
||||
loginForm :: (Okapi.MonadOkapi m, HasDBConnection m) => m Okapi.Response
|
||||
loginForm = loginFormRoute >>= loginFormHandler
|
||||
|
||||
loginFormRoute :: Okapi.MonadOkapi m => m ()
|
||||
loginFormRoute = undefined
|
||||
|
||||
loginFormHandler :: HasDBConnection m => () -> m Okapi.Response
|
||||
loginFormHandler = undefined
|
||||
|
||||
-- Submit Login Form
|
||||
|
||||
submitLoginForm :: (Okapi.MonadOkapi m, HasDBConnection m) => m Okapi.Response
|
||||
submitLoginForm = submitLoginFormRoute >>= submitLoginFormHandler
|
||||
|
||||
submitLoginFormRoute :: Okapi.MonadOkapi m => m ()
|
||||
submitLoginFormRoute = undefined
|
||||
|
||||
submitLoginFormHandler :: HasDBConnection m => () -> m Okapi.Response
|
||||
submitLoginFormHandler = undefined
|
||||
|
||||
-- Logout
|
||||
|
||||
logout :: (Okapi.MonadOkapi m, HasDBConnection m) => m Okapi.Response
|
||||
logout = logoutRoute >>= logoutHandler
|
||||
|
||||
logoutRoute :: Okapi.MonadOkapi m => m ()
|
||||
logoutRoute = undefined
|
||||
|
||||
logoutHandler :: HasDBConnection m => () -> m Okapi.Response
|
||||
logoutHandler = undefined
|
||||
|
||||
-- Follow
|
||||
|
||||
follow :: (Okapi.MonadOkapi m, HasDBConnection m) => m Okapi.Response
|
||||
follow = followRoute >>= followHandler
|
||||
|
||||
followRoute :: Okapi.MonadOkapi m => m ()
|
||||
followRoute = undefined
|
||||
|
||||
followHandler :: HasDBConnection m => () -> m Okapi.Response
|
||||
followHandler = undefined
|
||||
|
||||
-- Unfollow
|
||||
|
||||
unfollow :: (Okapi.MonadOkapi m, HasDBConnection m) => m Okapi.Response
|
||||
unfollow = unfollowRoute >>= unfollowHandler
|
||||
|
||||
unfollowRoute :: Okapi.MonadOkapi m => m ()
|
||||
unfollowRoute = undefined
|
||||
|
||||
unfollowHandler :: HasDBConnection m => () -> m Okapi.Response
|
||||
unfollowHandler = undefined
|
837
okapi.cabal
837
okapi.cabal
@ -1,18 +1,21 @@
|
||||
cabal-version: 1.12
|
||||
|
||||
-- This file has been generated from package.yaml by hpack version 0.34.4.
|
||||
--
|
||||
-- see: https://github.com/sol/hpack
|
||||
|
||||
name: okapi
|
||||
version: 0.2.0.0
|
||||
license: BSD3
|
||||
license-file: LICENSE
|
||||
copyright: 2022 Monadic Systems LLC
|
||||
maintainer: tech@monadic.systems
|
||||
author: Monadic Systems LLC
|
||||
synopsis: A micro web framework based on monadic parsing
|
||||
description: Please see the README on GitHub at <https://github.com/monadicsystems/okapi#readme>
|
||||
category: Web
|
||||
homepage: https://github.com/monadicsystems/okapi#readme
|
||||
bug-reports: https://github.com/monadicsystems/okapi/issues
|
||||
synopsis: A micro web framework based on monadic parsing
|
||||
description:
|
||||
Please see the README on GitHub at <https://github.com/monadicsystems/okapi#readme>
|
||||
|
||||
category: Web
|
||||
author: Monadic Systems LLC
|
||||
maintainer: tech@monadic.systems
|
||||
copyright: 2022 Monadic Systems LLC
|
||||
license: BSD3
|
||||
license-file: LICENSE
|
||||
build-type: Simple
|
||||
extra-source-files:
|
||||
README.md
|
||||
@ -23,434 +26,500 @@ source-repository head
|
||||
location: https://github.com/monadicsystems/okapi
|
||||
|
||||
library
|
||||
exposed-modules: Okapi
|
||||
hs-source-dirs: src
|
||||
other-modules: Paths_okapi
|
||||
default-language: Haskell2010
|
||||
exposed-modules:
|
||||
Okapi
|
||||
other-modules:
|
||||
Paths_okapi
|
||||
hs-source-dirs:
|
||||
src
|
||||
build-depends:
|
||||
aeson >=1.4.7,
|
||||
attoparsec,
|
||||
base >=4.7 && <5,
|
||||
base64,
|
||||
bytestring,
|
||||
containers,
|
||||
cookie,
|
||||
cryptonite,
|
||||
extra,
|
||||
http-api-data,
|
||||
http-types,
|
||||
memory,
|
||||
mmorph,
|
||||
mtl,
|
||||
network,
|
||||
parser-combinators,
|
||||
text,
|
||||
transformers,
|
||||
unagi-chan,
|
||||
vault,
|
||||
wai,
|
||||
wai-extra,
|
||||
wai-websockets,
|
||||
warp,
|
||||
warp-tls,
|
||||
websockets
|
||||
aeson >=1.4.7
|
||||
, attoparsec
|
||||
, base >=4.7 && <5
|
||||
, base64
|
||||
, bytestring
|
||||
, containers
|
||||
, cookie
|
||||
, cryptonite
|
||||
, extra
|
||||
, http-api-data
|
||||
, http-types
|
||||
, memory
|
||||
, mmorph
|
||||
, mtl
|
||||
, network
|
||||
, parser-combinators
|
||||
, text
|
||||
, transformers
|
||||
, unagi-chan
|
||||
, vault
|
||||
, wai
|
||||
, wai-extra
|
||||
, wai-websockets
|
||||
, warp
|
||||
, warp-tls
|
||||
, websockets
|
||||
default-language: Haskell2010
|
||||
|
||||
executable calculator-exe
|
||||
main-is: Main.hs
|
||||
hs-source-dirs: examples/calculator
|
||||
other-modules: Paths_okapi
|
||||
default-language: Haskell2010
|
||||
other-modules:
|
||||
Paths_okapi
|
||||
hs-source-dirs:
|
||||
examples/calculator
|
||||
ghc-options: -threaded -rtsopts -with-rtsopts=-N
|
||||
build-depends:
|
||||
aeson >=1.4.7,
|
||||
attoparsec,
|
||||
base >=4.7 && <5,
|
||||
base64,
|
||||
bytestring,
|
||||
containers,
|
||||
cookie,
|
||||
cryptonite,
|
||||
extra,
|
||||
http-api-data,
|
||||
http-types,
|
||||
memory,
|
||||
mmorph,
|
||||
mtl,
|
||||
network,
|
||||
okapi,
|
||||
parser-combinators,
|
||||
text,
|
||||
transformers,
|
||||
unagi-chan,
|
||||
vault,
|
||||
wai,
|
||||
wai-extra,
|
||||
wai-websockets,
|
||||
warp,
|
||||
warp-tls,
|
||||
websockets
|
||||
aeson >=1.4.7
|
||||
, attoparsec
|
||||
, base >=4.7 && <5
|
||||
, base64
|
||||
, bytestring
|
||||
, containers
|
||||
, cookie
|
||||
, cryptonite
|
||||
, extra
|
||||
, http-api-data
|
||||
, http-types
|
||||
, memory
|
||||
, mmorph
|
||||
, mtl
|
||||
, network
|
||||
, okapi
|
||||
, parser-combinators
|
||||
, text
|
||||
, transformers
|
||||
, unagi-chan
|
||||
, vault
|
||||
, wai
|
||||
, wai-extra
|
||||
, wai-websockets
|
||||
, warp
|
||||
, warp-tls
|
||||
, websockets
|
||||
default-language: Haskell2010
|
||||
|
||||
executable calculator2-exe
|
||||
main-is: Main.hs
|
||||
hs-source-dirs: examples/calculator2
|
||||
other-modules: Paths_okapi
|
||||
default-language: Haskell2010
|
||||
other-modules:
|
||||
Paths_okapi
|
||||
hs-source-dirs:
|
||||
examples/calculator2
|
||||
ghc-options: -threaded -rtsopts -with-rtsopts=-N
|
||||
build-depends:
|
||||
aeson,
|
||||
attoparsec,
|
||||
base >=4.7 && <5,
|
||||
base64,
|
||||
bytestring,
|
||||
containers,
|
||||
cookie,
|
||||
cryptonite,
|
||||
extra,
|
||||
http-api-data,
|
||||
http-types,
|
||||
memory,
|
||||
mmorph,
|
||||
mtl,
|
||||
network,
|
||||
okapi,
|
||||
parser-combinators,
|
||||
text,
|
||||
transformers,
|
||||
unagi-chan,
|
||||
vault,
|
||||
wai,
|
||||
wai-extra,
|
||||
wai-websockets,
|
||||
warp,
|
||||
warp-tls,
|
||||
websockets
|
||||
aeson
|
||||
, attoparsec
|
||||
, base >=4.7 && <5
|
||||
, base64
|
||||
, bytestring
|
||||
, containers
|
||||
, cookie
|
||||
, cryptonite
|
||||
, extra
|
||||
, http-api-data
|
||||
, http-types
|
||||
, memory
|
||||
, mmorph
|
||||
, mtl
|
||||
, network
|
||||
, okapi
|
||||
, parser-combinators
|
||||
, text
|
||||
, transformers
|
||||
, unagi-chan
|
||||
, vault
|
||||
, wai
|
||||
, wai-extra
|
||||
, wai-websockets
|
||||
, warp
|
||||
, warp-tls
|
||||
, websockets
|
||||
default-language: Haskell2010
|
||||
|
||||
executable car-dealership-exe
|
||||
main-is: Main.hs
|
||||
hs-source-dirs: examples/car-dealership
|
||||
other-modules: Paths_okapi
|
||||
default-language: Haskell2010
|
||||
other-modules:
|
||||
Paths_okapi
|
||||
hs-source-dirs:
|
||||
examples/car-dealership
|
||||
ghc-options: -threaded -rtsopts -with-rtsopts=-N
|
||||
build-depends:
|
||||
aeson >=1.4.7,
|
||||
attoparsec,
|
||||
base >=4.7 && <5,
|
||||
base64,
|
||||
bytestring,
|
||||
containers,
|
||||
cookie,
|
||||
cryptonite,
|
||||
extra,
|
||||
http-api-data,
|
||||
http-types,
|
||||
interpolatedstring-perl6,
|
||||
memory,
|
||||
mmorph,
|
||||
mtl,
|
||||
network,
|
||||
okapi,
|
||||
parser-combinators,
|
||||
random,
|
||||
sqlite-simple,
|
||||
text,
|
||||
transformers,
|
||||
unagi-chan,
|
||||
vault,
|
||||
wai,
|
||||
wai-extra,
|
||||
wai-websockets,
|
||||
warp,
|
||||
warp-tls,
|
||||
websockets
|
||||
aeson >=1.4.7
|
||||
, attoparsec
|
||||
, base >=4.7 && <5
|
||||
, base64
|
||||
, bytestring
|
||||
, containers
|
||||
, cookie
|
||||
, cryptonite
|
||||
, extra
|
||||
, http-api-data
|
||||
, http-types
|
||||
, interpolatedstring-perl6
|
||||
, memory
|
||||
, mmorph
|
||||
, mtl
|
||||
, network
|
||||
, okapi
|
||||
, parser-combinators
|
||||
, random
|
||||
, sqlite-simple
|
||||
, text
|
||||
, transformers
|
||||
, unagi-chan
|
||||
, vault
|
||||
, wai
|
||||
, wai-extra
|
||||
, wai-websockets
|
||||
, warp
|
||||
, warp-tls
|
||||
, websockets
|
||||
default-language: Haskell2010
|
||||
|
||||
executable dotodo-exe
|
||||
main-is: Main.hs
|
||||
hs-source-dirs: examples/dotodo
|
||||
other-modules: Paths_okapi
|
||||
default-language: Haskell2010
|
||||
other-modules:
|
||||
Paths_okapi
|
||||
hs-source-dirs:
|
||||
examples/dotodo
|
||||
ghc-options: -threaded -rtsopts -with-rtsopts=-N
|
||||
build-depends:
|
||||
aeson >=1.4.7,
|
||||
attoparsec,
|
||||
base >=4.7 && <5,
|
||||
base64,
|
||||
bytestring,
|
||||
containers,
|
||||
cookie,
|
||||
cryptonite,
|
||||
extra,
|
||||
http-api-data,
|
||||
http-types,
|
||||
lucid2,
|
||||
lucid2-htmx,
|
||||
memory,
|
||||
mmorph,
|
||||
mtl,
|
||||
network,
|
||||
okapi,
|
||||
parser-combinators,
|
||||
sqlite-simple,
|
||||
text,
|
||||
transformers,
|
||||
unagi-chan,
|
||||
vault,
|
||||
wai,
|
||||
wai-extra,
|
||||
wai-websockets,
|
||||
warp,
|
||||
warp-tls,
|
||||
websockets
|
||||
aeson >=1.4.7
|
||||
, attoparsec
|
||||
, base >=4.7 && <5
|
||||
, base64
|
||||
, bytestring
|
||||
, containers
|
||||
, cookie
|
||||
, cryptonite
|
||||
, extra
|
||||
, http-api-data
|
||||
, http-types
|
||||
, lucid2
|
||||
, lucid2-htmx
|
||||
, memory
|
||||
, mmorph
|
||||
, mtl
|
||||
, network
|
||||
, okapi
|
||||
, parser-combinators
|
||||
, sqlite-simple
|
||||
, text
|
||||
, transformers
|
||||
, unagi-chan
|
||||
, vault
|
||||
, wai
|
||||
, wai-extra
|
||||
, wai-websockets
|
||||
, warp
|
||||
, warp-tls
|
||||
, websockets
|
||||
default-language: Haskell2010
|
||||
|
||||
executable realworld-htmx-exe
|
||||
main-is: Main.hs
|
||||
other-modules:
|
||||
Paths_okapi
|
||||
hs-source-dirs:
|
||||
examples/realworld-htmx
|
||||
ghc-options: -threaded -rtsopts -with-rtsopts=-N
|
||||
build-depends:
|
||||
aeson >=1.4.7
|
||||
, attoparsec
|
||||
, base >=4.7 && <5
|
||||
, base64
|
||||
, bytestring
|
||||
, containers
|
||||
, cookie
|
||||
, cryptonite
|
||||
, extra
|
||||
, hasql
|
||||
, http-api-data
|
||||
, http-types
|
||||
, lucid2
|
||||
, lucid2-htmx
|
||||
, memory
|
||||
, mmorph
|
||||
, mtl
|
||||
, network
|
||||
, okapi
|
||||
, parser-combinators
|
||||
, rel8
|
||||
, text
|
||||
, transformers
|
||||
, unagi-chan
|
||||
, vault
|
||||
, wai
|
||||
, wai-extra
|
||||
, wai-websockets
|
||||
, warp
|
||||
, warp-tls
|
||||
, websockets
|
||||
default-language: Haskell2010
|
||||
|
||||
executable sse-exe
|
||||
main-is: Main.hs
|
||||
hs-source-dirs: examples/sse
|
||||
other-modules: Paths_okapi
|
||||
default-language: Haskell2010
|
||||
other-modules:
|
||||
Paths_okapi
|
||||
hs-source-dirs:
|
||||
examples/sse
|
||||
ghc-options: -threaded -rtsopts -with-rtsopts=-N
|
||||
build-depends:
|
||||
aeson >=1.4.7,
|
||||
attoparsec,
|
||||
base >=4.7 && <5,
|
||||
base64,
|
||||
bytestring,
|
||||
containers,
|
||||
cookie,
|
||||
cryptonite,
|
||||
extra,
|
||||
http-api-data,
|
||||
http-types,
|
||||
memory,
|
||||
mmorph,
|
||||
mtl,
|
||||
network,
|
||||
okapi,
|
||||
parser-combinators,
|
||||
slave-thread,
|
||||
text,
|
||||
time,
|
||||
transformers,
|
||||
unagi-chan,
|
||||
vault,
|
||||
wai,
|
||||
wai-extra,
|
||||
wai-websockets,
|
||||
warp,
|
||||
warp-tls,
|
||||
websockets
|
||||
aeson >=1.4.7
|
||||
, attoparsec
|
||||
, base >=4.7 && <5
|
||||
, base64
|
||||
, bytestring
|
||||
, containers
|
||||
, cookie
|
||||
, cryptonite
|
||||
, extra
|
||||
, http-api-data
|
||||
, http-types
|
||||
, memory
|
||||
, mmorph
|
||||
, mtl
|
||||
, network
|
||||
, okapi
|
||||
, parser-combinators
|
||||
, slave-thread
|
||||
, text
|
||||
, time
|
||||
, transformers
|
||||
, unagi-chan
|
||||
, vault
|
||||
, wai
|
||||
, wai-extra
|
||||
, wai-websockets
|
||||
, warp
|
||||
, warp-tls
|
||||
, websockets
|
||||
default-language: Haskell2010
|
||||
|
||||
executable static-exe
|
||||
main-is: Main.hs
|
||||
hs-source-dirs: examples/static
|
||||
other-modules: Paths_okapi
|
||||
default-language: Haskell2010
|
||||
other-modules:
|
||||
Paths_okapi
|
||||
hs-source-dirs:
|
||||
examples/static
|
||||
ghc-options: -threaded -rtsopts -with-rtsopts=-N
|
||||
build-depends:
|
||||
aeson >=1.4.7,
|
||||
attoparsec,
|
||||
base >=4.7 && <5,
|
||||
base64,
|
||||
bytestring,
|
||||
containers,
|
||||
cookie,
|
||||
cryptonite,
|
||||
extra,
|
||||
http-api-data,
|
||||
http-types,
|
||||
memory,
|
||||
mmorph,
|
||||
mtl,
|
||||
network,
|
||||
okapi,
|
||||
parser-combinators,
|
||||
text,
|
||||
transformers,
|
||||
unagi-chan,
|
||||
vault,
|
||||
wai,
|
||||
wai-extra,
|
||||
wai-websockets,
|
||||
warp,
|
||||
warp-tls,
|
||||
websockets
|
||||
aeson >=1.4.7
|
||||
, attoparsec
|
||||
, base >=4.7 && <5
|
||||
, base64
|
||||
, bytestring
|
||||
, containers
|
||||
, cookie
|
||||
, cryptonite
|
||||
, extra
|
||||
, http-api-data
|
||||
, http-types
|
||||
, memory
|
||||
, mmorph
|
||||
, mtl
|
||||
, network
|
||||
, okapi
|
||||
, parser-combinators
|
||||
, text
|
||||
, transformers
|
||||
, unagi-chan
|
||||
, vault
|
||||
, wai
|
||||
, wai-extra
|
||||
, wai-websockets
|
||||
, warp
|
||||
, warp-tls
|
||||
, websockets
|
||||
default-language: Haskell2010
|
||||
|
||||
executable todo-exe
|
||||
main-is: Main.hs
|
||||
hs-source-dirs: examples/todo
|
||||
other-modules: Paths_okapi
|
||||
default-language: Haskell2010
|
||||
other-modules:
|
||||
Paths_okapi
|
||||
hs-source-dirs:
|
||||
examples/todo
|
||||
ghc-options: -threaded -rtsopts -with-rtsopts=-N
|
||||
build-depends:
|
||||
aeson >=1.4.7,
|
||||
attoparsec,
|
||||
base >=4.7 && <5,
|
||||
base64,
|
||||
bytestring,
|
||||
containers,
|
||||
cookie,
|
||||
cryptonite,
|
||||
extra,
|
||||
http-api-data,
|
||||
http-types,
|
||||
memory,
|
||||
mmorph,
|
||||
mtl,
|
||||
network,
|
||||
okapi,
|
||||
parser-combinators,
|
||||
sqlite-simple,
|
||||
text,
|
||||
transformers,
|
||||
unagi-chan,
|
||||
vault,
|
||||
wai,
|
||||
wai-extra,
|
||||
wai-websockets,
|
||||
warp,
|
||||
warp-tls,
|
||||
websockets
|
||||
aeson >=1.4.7
|
||||
, attoparsec
|
||||
, base >=4.7 && <5
|
||||
, base64
|
||||
, bytestring
|
||||
, containers
|
||||
, cookie
|
||||
, cryptonite
|
||||
, extra
|
||||
, http-api-data
|
||||
, http-types
|
||||
, memory
|
||||
, mmorph
|
||||
, mtl
|
||||
, network
|
||||
, okapi
|
||||
, parser-combinators
|
||||
, sqlite-simple
|
||||
, text
|
||||
, transformers
|
||||
, unagi-chan
|
||||
, vault
|
||||
, wai
|
||||
, wai-extra
|
||||
, wai-websockets
|
||||
, warp
|
||||
, warp-tls
|
||||
, websockets
|
||||
default-language: Haskell2010
|
||||
|
||||
executable todo2-exe
|
||||
main-is: Main.hs
|
||||
hs-source-dirs: examples/todo2
|
||||
other-modules: Paths_okapi
|
||||
default-language: Haskell2010
|
||||
other-modules:
|
||||
Paths_okapi
|
||||
hs-source-dirs:
|
||||
examples/todo2
|
||||
ghc-options: -threaded -rtsopts -with-rtsopts=-N
|
||||
build-depends:
|
||||
aeson >=1.4.7,
|
||||
attoparsec,
|
||||
base >=4.7 && <5,
|
||||
base64,
|
||||
bytestring,
|
||||
containers,
|
||||
cookie,
|
||||
cryptonite,
|
||||
extra,
|
||||
http-api-data,
|
||||
http-types,
|
||||
memory,
|
||||
mmorph,
|
||||
mtl,
|
||||
network,
|
||||
okapi,
|
||||
parser-combinators,
|
||||
sqlite-simple,
|
||||
text,
|
||||
transformers,
|
||||
unagi-chan,
|
||||
vault,
|
||||
wai,
|
||||
wai-extra,
|
||||
wai-websockets,
|
||||
warp,
|
||||
warp-tls,
|
||||
websockets
|
||||
aeson >=1.4.7
|
||||
, attoparsec
|
||||
, base >=4.7 && <5
|
||||
, base64
|
||||
, bytestring
|
||||
, containers
|
||||
, cookie
|
||||
, cryptonite
|
||||
, extra
|
||||
, http-api-data
|
||||
, http-types
|
||||
, memory
|
||||
, mmorph
|
||||
, mtl
|
||||
, network
|
||||
, okapi
|
||||
, parser-combinators
|
||||
, sqlite-simple
|
||||
, text
|
||||
, transformers
|
||||
, unagi-chan
|
||||
, vault
|
||||
, wai
|
||||
, wai-extra
|
||||
, wai-websockets
|
||||
, warp
|
||||
, warp-tls
|
||||
, websockets
|
||||
default-language: Haskell2010
|
||||
|
||||
executable todo3-exe
|
||||
main-is: Main.hs
|
||||
hs-source-dirs: examples/todo3
|
||||
other-modules: Paths_okapi
|
||||
default-language: Haskell2010
|
||||
other-modules:
|
||||
Paths_okapi
|
||||
hs-source-dirs:
|
||||
examples/todo3
|
||||
ghc-options: -threaded -rtsopts -with-rtsopts=-N
|
||||
build-depends:
|
||||
aeson >=1.4.7,
|
||||
attoparsec,
|
||||
base >=4.7 && <5,
|
||||
base64,
|
||||
bytestring,
|
||||
containers,
|
||||
cookie,
|
||||
cryptonite,
|
||||
extra,
|
||||
http-api-data,
|
||||
http-types,
|
||||
interpolatedstring-perl6,
|
||||
memory,
|
||||
mmorph,
|
||||
mtl,
|
||||
network,
|
||||
okapi,
|
||||
parser-combinators,
|
||||
sqlite-simple,
|
||||
text,
|
||||
transformers,
|
||||
unagi-chan,
|
||||
vault,
|
||||
wai,
|
||||
wai-extra,
|
||||
wai-websockets,
|
||||
warp,
|
||||
warp-tls,
|
||||
websockets
|
||||
aeson >=1.4.7
|
||||
, attoparsec
|
||||
, base >=4.7 && <5
|
||||
, base64
|
||||
, bytestring
|
||||
, containers
|
||||
, cookie
|
||||
, cryptonite
|
||||
, extra
|
||||
, http-api-data
|
||||
, http-types
|
||||
, interpolatedstring-perl6
|
||||
, memory
|
||||
, mmorph
|
||||
, mtl
|
||||
, network
|
||||
, okapi
|
||||
, parser-combinators
|
||||
, sqlite-simple
|
||||
, text
|
||||
, transformers
|
||||
, unagi-chan
|
||||
, vault
|
||||
, wai
|
||||
, wai-extra
|
||||
, wai-websockets
|
||||
, warp
|
||||
, warp-tls
|
||||
, websockets
|
||||
default-language: Haskell2010
|
||||
|
||||
executable twitter-clone-exe
|
||||
main-is: Main.hs
|
||||
hs-source-dirs: examples/twitter-clone
|
||||
other-modules: Paths_okapi
|
||||
default-language: Haskell2010
|
||||
other-modules:
|
||||
Paths_okapi
|
||||
hs-source-dirs:
|
||||
examples/twitter-clone
|
||||
ghc-options: -threaded -rtsopts -with-rtsopts=-N
|
||||
build-depends:
|
||||
aeson >=1.4.7,
|
||||
attoparsec,
|
||||
base >=4.7 && <5,
|
||||
base64,
|
||||
bytestring,
|
||||
containers,
|
||||
cookie,
|
||||
cryptonite,
|
||||
extra,
|
||||
http-api-data,
|
||||
http-types,
|
||||
memory,
|
||||
mmorph,
|
||||
mtl,
|
||||
network,
|
||||
okapi,
|
||||
parser-combinators,
|
||||
rel8,
|
||||
text,
|
||||
transformers,
|
||||
unagi-chan,
|
||||
vault,
|
||||
wai,
|
||||
wai-extra,
|
||||
wai-websockets,
|
||||
warp,
|
||||
warp-tls,
|
||||
websockets
|
||||
aeson >=1.4.7
|
||||
, attoparsec
|
||||
, base >=4.7 && <5
|
||||
, base64
|
||||
, bytestring
|
||||
, containers
|
||||
, cookie
|
||||
, cryptonite
|
||||
, extra
|
||||
, http-api-data
|
||||
, http-types
|
||||
, memory
|
||||
, mmorph
|
||||
, mtl
|
||||
, network
|
||||
, okapi
|
||||
, parser-combinators
|
||||
, rel8
|
||||
, text
|
||||
, transformers
|
||||
, unagi-chan
|
||||
, vault
|
||||
, wai
|
||||
, wai-extra
|
||||
, wai-websockets
|
||||
, warp
|
||||
, warp-tls
|
||||
, websockets
|
||||
default-language: Haskell2010
|
||||
|
||||
test-suite okapi-test
|
||||
type: exitcode-stdio-1.0
|
||||
main-is: Spec.hs
|
||||
hs-source-dirs: test
|
||||
other-modules: Paths_okapi
|
||||
default-language: Haskell2010
|
||||
other-modules:
|
||||
Paths_okapi
|
||||
hs-source-dirs:
|
||||
test
|
||||
ghc-options: -threaded -rtsopts -with-rtsopts=-N
|
||||
build-depends:
|
||||
aeson >=1.4.7,
|
||||
attoparsec,
|
||||
base >=4.7 && <5,
|
||||
base64,
|
||||
bytestring,
|
||||
containers,
|
||||
cookie,
|
||||
cryptonite,
|
||||
doctest-parallel,
|
||||
extra,
|
||||
http-api-data,
|
||||
http-types,
|
||||
memory,
|
||||
mmorph,
|
||||
mtl,
|
||||
network,
|
||||
okapi,
|
||||
parser-combinators,
|
||||
text,
|
||||
transformers,
|
||||
unagi-chan,
|
||||
vault,
|
||||
wai,
|
||||
wai-extra,
|
||||
wai-websockets,
|
||||
warp,
|
||||
warp-tls,
|
||||
websockets
|
||||
aeson >=1.4.7
|
||||
, attoparsec
|
||||
, base >=4.7 && <5
|
||||
, base64
|
||||
, bytestring
|
||||
, containers
|
||||
, cookie
|
||||
, cryptonite
|
||||
, doctest-parallel
|
||||
, extra
|
||||
, http-api-data
|
||||
, http-types
|
||||
, memory
|
||||
, mmorph
|
||||
, mtl
|
||||
, network
|
||||
, okapi
|
||||
, parser-combinators
|
||||
, text
|
||||
, transformers
|
||||
, unagi-chan
|
||||
, vault
|
||||
, wai
|
||||
, wai-extra
|
||||
, wai-websockets
|
||||
, warp
|
||||
, warp-tls
|
||||
, websockets
|
||||
default-language: Haskell2010
|
||||
|
16
package.yaml
16
package.yaml
@ -49,9 +49,9 @@ library:
|
||||
source-dirs: src
|
||||
|
||||
executables:
|
||||
# realworld-exe:
|
||||
# realworld-json-exe:
|
||||
# main: Main.hs
|
||||
# source-dirs: examples/realworld
|
||||
# source-dirs: examples/realworld-json
|
||||
# ghc-options:
|
||||
# - -threaded
|
||||
# - -rtsopts
|
||||
@ -66,6 +66,18 @@ executables:
|
||||
# - time
|
||||
# - vector
|
||||
# - profunctors
|
||||
realworld-htmx-exe:
|
||||
main: Main.hs
|
||||
source-dirs: examples/realworld-htmx
|
||||
ghc-options:
|
||||
- -threaded
|
||||
- -rtsopts
|
||||
- -with-rtsopts=-N
|
||||
dependencies:
|
||||
- okapi
|
||||
- rel8
|
||||
- lucid2-htmx
|
||||
- lucid2
|
||||
calculator-exe:
|
||||
main: Main.hs
|
||||
source-dirs: examples/calculator
|
||||
|
71
stack.yaml
71
stack.yaml
@ -1,71 +0,0 @@
|
||||
# This file was automatically generated by 'stack init'
|
||||
#
|
||||
# Some commonly used options have been documented as comments in this file.
|
||||
# For advanced use and comprehensive documentation of the format, please see:
|
||||
# https://docs.haskellstack.org/en/stable/yaml_configuration/
|
||||
|
||||
# Resolver to choose a 'specific' stackage snapshot or a compiler version.
|
||||
# A snapshot resolver dictates the compiler version and the set of packages
|
||||
# to be used for project dependencies. For example:
|
||||
#
|
||||
# resolver: lts-3.5
|
||||
# resolver: nightly-2015-09-21
|
||||
# resolver: ghc-7.10.2
|
||||
#
|
||||
# The location of a snapshot can be provided as a file or url. Stack assumes
|
||||
# a snapshot provided as a file might change, whereas a url resource does not.
|
||||
#
|
||||
# resolver: ./custom-snapshot.yaml
|
||||
# resolver: https://example.com/snapshots/2018-01-01.yaml
|
||||
resolver:
|
||||
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/19/1.yaml
|
||||
|
||||
# User packages to be built.
|
||||
# Various formats can be used as shown in the example below.
|
||||
#
|
||||
# packages:
|
||||
# - some-directory
|
||||
# - https://example.com/foo/bar/baz-0.0.2.tar.gz
|
||||
# subdirs:
|
||||
# - auto-update
|
||||
# - wai
|
||||
packages:
|
||||
- .
|
||||
# Dependency packages to be pulled from upstream that are not in the resolver.
|
||||
# These entries can reference officially published versions as well as
|
||||
# forks / in-progress versions pinned to a git hash. For example:
|
||||
#
|
||||
extra-deps:
|
||||
- lucid2-0.0.20220526@sha256:b5d346d428a63610d458aba1c4e0fe4924628fec609f028d74777bfaca1d92b5,1877
|
||||
- containers-0.6.6@sha256:008d007dfff018954e05ecdb8d628d8e32531f7dc3c6bb7e9bd55118c1224514,2589
|
||||
- lucid2-htmx-0.1.0.8@sha256:cde494a8e4d199dfcc59331f41c72e1a60c3d2106e1bee56e61d97b09425f850,1541
|
||||
- Cabal-3.6.3.0@sha256:ff97c442b0c679c1c9876acd15f73ac4f602b973c45bde42b43ec28265ee48f4,12459
|
||||
- binary-0.8.9.1@sha256:81f468c1c75fd6535152ab69b2d32ac6cfcc03e345267b069abe4da56ec95801,6523
|
||||
- parsec-3.1.15.1@sha256:8c7a36aaadff12a38817fc3c4ff6c87e3352cffd1a58df640de7ed7a97ad8fa3,4601
|
||||
- text-1.2.5.0@sha256:791f0f6c97ed96113f17ab520cf0efe1a3a4f883a8c85910a5660567c8241c40,7895
|
||||
|
||||
pvp-bounds: both
|
||||
|
||||
# Override default flag values for local packages and extra-deps
|
||||
# flags: {}
|
||||
|
||||
# Extra package databases containing global packages
|
||||
# extra-package-dbs: []
|
||||
|
||||
# Control whether we use the GHC we find on the path
|
||||
# system-ghc: true
|
||||
#
|
||||
# Require a specific version of stack, using version ranges
|
||||
# require-stack-version: -any # Default
|
||||
# require-stack-version: ">=2.7"
|
||||
#
|
||||
# Override the architecture used by stack, especially useful on Windows
|
||||
# arch: i386
|
||||
# arch: x86_64
|
||||
#
|
||||
# Extra directories used by stack for building
|
||||
# extra-include-dirs: [/path/to/dir]
|
||||
# extra-lib-dirs: [/path/to/dir]
|
||||
#
|
||||
# Allow a newer minor version of GHC than the snapshot specifies
|
||||
# compiler-check: newer-minor
|
@ -1,62 +0,0 @@
|
||||
# This file was autogenerated by Stack.
|
||||
# You should not edit this file by hand.
|
||||
# For more information, please see the documentation at:
|
||||
# https://docs.haskellstack.org/en/stable/lock_files
|
||||
|
||||
packages:
|
||||
- completed:
|
||||
hackage: lucid2-0.0.20220526@sha256:b5d346d428a63610d458aba1c4e0fe4924628fec609f028d74777bfaca1d92b5,1877
|
||||
pantry-tree:
|
||||
size: 477
|
||||
sha256: 355acf57a4ac40d06c48f903c41eda4136d4a218f38bdbfebee7960d23651421
|
||||
original:
|
||||
hackage: lucid2-0.0.20220526@sha256:b5d346d428a63610d458aba1c4e0fe4924628fec609f028d74777bfaca1d92b5,1877
|
||||
- completed:
|
||||
hackage: containers-0.6.6@sha256:008d007dfff018954e05ecdb8d628d8e32531f7dc3c6bb7e9bd55118c1224514,2589
|
||||
pantry-tree:
|
||||
size: 2822
|
||||
sha256: de48bcf6b468c4793bbdd22f969d940bfe74425c74654b0efbf0487792c239b5
|
||||
original:
|
||||
hackage: containers-0.6.6@sha256:008d007dfff018954e05ecdb8d628d8e32531f7dc3c6bb7e9bd55118c1224514,2589
|
||||
- completed:
|
||||
hackage: lucid2-htmx-0.1.0.8@sha256:cde494a8e4d199dfcc59331f41c72e1a60c3d2106e1bee56e61d97b09425f850,1541
|
||||
pantry-tree:
|
||||
size: 318
|
||||
sha256: bccf8d27fd23db6daa9b1a7e64d54715537161014db7817dc9905015b1de5214
|
||||
original:
|
||||
hackage: lucid2-htmx-0.1.0.8@sha256:cde494a8e4d199dfcc59331f41c72e1a60c3d2106e1bee56e61d97b09425f850,1541
|
||||
- completed:
|
||||
hackage: Cabal-3.6.3.0@sha256:ff97c442b0c679c1c9876acd15f73ac4f602b973c45bde42b43ec28265ee48f4,12459
|
||||
pantry-tree:
|
||||
size: 19757
|
||||
sha256: b250a53bdb56844f047a2927833bb565b936a289abfa85dfc2a63148d776368a
|
||||
original:
|
||||
hackage: Cabal-3.6.3.0@sha256:ff97c442b0c679c1c9876acd15f73ac4f602b973c45bde42b43ec28265ee48f4,12459
|
||||
- completed:
|
||||
hackage: binary-0.8.9.1@sha256:81f468c1c75fd6535152ab69b2d32ac6cfcc03e345267b069abe4da56ec95801,6523
|
||||
pantry-tree:
|
||||
size: 1976
|
||||
sha256: 956ecd662408f69615977b87a92e042abcdc447b7824b8aabf5788c4393c10c5
|
||||
original:
|
||||
hackage: binary-0.8.9.1@sha256:81f468c1c75fd6535152ab69b2d32ac6cfcc03e345267b069abe4da56ec95801,6523
|
||||
- completed:
|
||||
hackage: parsec-3.1.15.1@sha256:8c7a36aaadff12a38817fc3c4ff6c87e3352cffd1a58df640de7ed7a97ad8fa3,4601
|
||||
pantry-tree:
|
||||
size: 2630
|
||||
sha256: 147ad21b8aa90273721903a6b294cc4ecd660d229d88c4e84c6275bc5d630ae6
|
||||
original:
|
||||
hackage: parsec-3.1.15.1@sha256:8c7a36aaadff12a38817fc3c4ff6c87e3352cffd1a58df640de7ed7a97ad8fa3,4601
|
||||
- completed:
|
||||
hackage: text-1.2.5.0@sha256:791f0f6c97ed96113f17ab520cf0efe1a3a4f883a8c85910a5660567c8241c40,7895
|
||||
pantry-tree:
|
||||
size: 7395
|
||||
sha256: f41504ec5c04a3f3358ef104362f02fdef29cbce4e5e4e6dbd6b6db70c40d4bf
|
||||
original:
|
||||
hackage: text-1.2.5.0@sha256:791f0f6c97ed96113f17ab520cf0efe1a3a4f883a8c85910a5660567c8241c40,7895
|
||||
snapshots:
|
||||
- completed:
|
||||
size: 617355
|
||||
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/19/1.yaml
|
||||
sha256: cbd5e8593869445794924668479b5bd9f1738d075898623dceacc13b2576b6e3
|
||||
original:
|
||||
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/19/1.yaml
|
Loading…
Reference in New Issue
Block a user