:3
This commit is contained in:
commit
b3feeda7c6
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
*.js
|
||||||
|
*.~undo-tree~
|
||||||
|
*.agdai
|
62
basic.agda
Normal file
62
basic.agda
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
module basic where
|
||||||
|
|
||||||
|
open import Agda.Primitive renaming (Set to Type)
|
||||||
|
open import Agda.Builtin.Float
|
||||||
|
open import Agda.Builtin.String
|
||||||
|
open import Agda.Builtin.IO
|
||||||
|
open import Agda.Builtin.Unit
|
||||||
|
|
||||||
|
postulate
|
||||||
|
HTTPModule : Type
|
||||||
|
http : HTTPModule
|
||||||
|
HTTPServer : Type
|
||||||
|
HTTPReq : Type
|
||||||
|
HTTPRes : Type
|
||||||
|
modify : Type → Type
|
||||||
|
modLog : {A : Type} → modify A
|
||||||
|
setStatusCode : Float → modify HTTPRes
|
||||||
|
setHeader : String → String → modify HTTPRes
|
||||||
|
setEnd : String → modify HTTPRes
|
||||||
|
pure : {A : Type} → A → modify A
|
||||||
|
_>>=_ : {A : Type} → modify A → (A → modify A) → modify A
|
||||||
|
_>>_ : {A : Type} → modify A → modify A → modify A
|
||||||
|
createServer : HTTPModule → (HTTPReq → modify HTTPRes) → HTTPServer
|
||||||
|
serverListen : HTTPServer → Float → String → IO ⊤ → IO ⊤
|
||||||
|
doNothing : IO ⊤
|
||||||
|
putStrLn : String → IO ⊤
|
||||||
|
|
||||||
|
{-# COMPILE JS putStrLn = (str) => { console.log(str); } #-}
|
||||||
|
|
||||||
|
{-# COMPILE JS http = require('http') #-}
|
||||||
|
|
||||||
|
{-# COMPILE JS setStatusCode = ((float) => { return (res) => { res.statusCode = float; }}) #-}
|
||||||
|
{-# COMPILE JS setHeader = ((header) => { return (content) => { return (res) => { res.setHeader(header, content); }}}) #-}
|
||||||
|
{-# COMPILE JS setEnd = ((content) => { return (res) => { res.end(content); }}) #-}
|
||||||
|
|
||||||
|
{-# COMPILE JS modLog = ((a) => { return (res) => { console.log(res); }}) #-}
|
||||||
|
{-# COMPILE JS pure = ((a) => { return (res) => { return structuredClone(a); }}) #-}
|
||||||
|
{-# COMPILE JS _>>=_ = ((a) => { return (ma) => { return (amb) => { return (res) => { amb(ma(res)); }}}}) #-}
|
||||||
|
{-# COMPILE JS _>>_ = ((a) => { return (ma) => { return (mb) => { return (res) => { ma(res); mb(res); }}}}) #-}
|
||||||
|
|
||||||
|
{-# COMPILE JS createServer = ((http) => { return (handler) => { return http.createServer((req, res) => { handler(req)(res); }); }}) #-}
|
||||||
|
{-# COMPILE JS serverListen = ((serv) => { return (port) => { return (host) => { return (action) => { return () => { serv.listen(port, host, action) }}}}}) #-}
|
||||||
|
|
||||||
|
{-# COMPILE JS doNothing = (() => {}) #-}
|
||||||
|
|
||||||
|
port : Float
|
||||||
|
port = 3000.0
|
||||||
|
|
||||||
|
hostname : String
|
||||||
|
hostname = "localhost"
|
||||||
|
|
||||||
|
handleReg : modify HTTPRes
|
||||||
|
handleReg = do
|
||||||
|
setStatusCode 200.0
|
||||||
|
setHeader "Content-Type" "text/plain"
|
||||||
|
setEnd "Hello World"
|
||||||
|
|
||||||
|
server : HTTPServer
|
||||||
|
server = createServer http (λ _ → handleReg)
|
||||||
|
|
||||||
|
main : IO ⊤
|
||||||
|
main = serverListen server port hostname (putStrLn "served request")
|
Loading…
Reference in New Issue
Block a user