aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library
diff options
context:
space:
mode:
authorEduardo Julian2022-10-22 12:43:39 -0400
committerEduardo Julian2022-10-22 12:43:39 -0400
commit8c63a525089597af1f9282c76daf97bf2b6058e0 (patch)
tree19750dcc3d0ad1bf14a1441a4f781c26b9285bd8 /stdlib/source/library
parentb25eec45fa9aabdc252d59afad3e0c7e73a18fd9 (diff)
New (optional) names for Frac type + fixed module of CSP concurrency.
Diffstat (limited to 'stdlib/source/library')
-rw-r--r--stdlib/source/library/lux.lux3
-rw-r--r--stdlib/source/library/lux/control/concurrency/csp.lux (renamed from stdlib/source/library/lux/control/concurrency/cps.lux)0
-rw-r--r--stdlib/source/library/lux/ffi.jvm.lux2
-rw-r--r--stdlib/source/library/lux/ffi.old.lux2
-rw-r--r--stdlib/source/library/lux/meta/target/jvm/constant.lux2
-rw-r--r--stdlib/source/library/lux/meta/target/jvm/constant/pool.lux2
-rw-r--r--stdlib/source/library/lux/world/net/http.lux22
-rw-r--r--stdlib/source/library/lux/world/net/http/client.lux11
-rw-r--r--stdlib/source/library/lux/world/net/http/header.lux78
-rw-r--r--stdlib/source/library/lux/world/net/http/mime.lux22
-rw-r--r--stdlib/source/library/lux/world/net/http/status.lux6
11 files changed, 100 insertions, 50 deletions
diff --git a/stdlib/source/library/lux.lux b/stdlib/source/library/lux.lux
index af8942f2e..e6aae9218 100644
--- a/stdlib/source/library/lux.lux
+++ b/stdlib/source/library/lux.lux
@@ -5830,3 +5830,6 @@
[Generation]
[Declaration]
)
+
+(type .public F64 Frac)
+(type .public Double Frac)
diff --git a/stdlib/source/library/lux/control/concurrency/cps.lux b/stdlib/source/library/lux/control/concurrency/csp.lux
index f8cd41a77..f8cd41a77 100644
--- a/stdlib/source/library/lux/control/concurrency/cps.lux
+++ b/stdlib/source/library/lux/control/concurrency/csp.lux
diff --git a/stdlib/source/library/lux/ffi.jvm.lux b/stdlib/source/library/lux/ffi.jvm.lux
index 0f704a0cb..8db8186a6 100644
--- a/stdlib/source/library/lux/ffi.jvm.lux
+++ b/stdlib/source/library/lux/ffi.jvm.lux
@@ -1,6 +1,6 @@
(.require
[library
- [lux (.except Primitive Type Declaration int char is as type)
+ [lux (.except Primitive Type Declaration Double int char is as type)
[abstract
["[0]" monad (.only do)]]
[control
diff --git a/stdlib/source/library/lux/ffi.old.lux b/stdlib/source/library/lux/ffi.old.lux
index 7444e1d3a..d1922147b 100644
--- a/stdlib/source/library/lux/ffi.old.lux
+++ b/stdlib/source/library/lux/ffi.old.lux
@@ -1,6 +1,6 @@
(.require
[library
- [lux (.except is as type)
+ [lux (.except Double is as type)
[abstract
["[0]" monad (.only Monad do)]
["[0]" enum]]
diff --git a/stdlib/source/library/lux/meta/target/jvm/constant.lux b/stdlib/source/library/lux/meta/target/jvm/constant.lux
index 3b77b382a..a24ae8cb8 100644
--- a/stdlib/source/library/lux/meta/target/jvm/constant.lux
+++ b/stdlib/source/library/lux/meta/target/jvm/constant.lux
@@ -1,6 +1,6 @@
(.require
[library
- [lux (.except)
+ [lux (.except Double)
["[0]" ffi (.only import)]
[abstract
[monad (.only do)]
diff --git a/stdlib/source/library/lux/meta/target/jvm/constant/pool.lux b/stdlib/source/library/lux/meta/target/jvm/constant/pool.lux
index 759d88314..bb57608a0 100644
--- a/stdlib/source/library/lux/meta/target/jvm/constant/pool.lux
+++ b/stdlib/source/library/lux/meta/target/jvm/constant/pool.lux
@@ -1,6 +1,6 @@
(.require
[library
- [lux (.except)
+ [lux (.except Double)
["[0]" ffi]
[abstract
[equivalence (.only Equivalence)]
diff --git a/stdlib/source/library/lux/world/net/http.lux b/stdlib/source/library/lux/world/net/http.lux
index 3c95a1c03..37d9c0fd4 100644
--- a/stdlib/source/library/lux/world/net/http.lux
+++ b/stdlib/source/library/lux/world/net/http.lux
@@ -8,13 +8,12 @@
[data
[binary (.only Binary)]]]]
[/
- [version (.only Version)]]
+ [version (.only Version)]
+ [status (.only Status)]
+ [header (.only Headers)]]
[// (.only Address)
[uri (.only URI)
- [scheme (.only Scheme)]]
- [//
- ["[0]" environment
- ["[1]" \\parser (.only Environment)]]]])
+ [scheme (.only Scheme)]]])
(type .public Method
(Variant
@@ -28,19 +27,6 @@
{#Options}
{#Trace}))
-(type .public Status
- Nat)
-
-(type .public Headers
- Environment)
-
-(def .public empty
- Headers
- environment.empty)
-
-(type .public Header
- (-> Headers Headers))
-
(type .public (Body !)
(-> (Maybe Nat)
(! (Try [Nat Binary]))))
diff --git a/stdlib/source/library/lux/world/net/http/client.lux b/stdlib/source/library/lux/world/net/http/client.lux
index c11a8285d..49b376ee3 100644
--- a/stdlib/source/library/lux/world/net/http/client.lux
+++ b/stdlib/source/library/lux/world/net/http/client.lux
@@ -28,11 +28,12 @@
[syntax (.only syntax)]
["[0]" template]]]]]
["[0]" // (.only)
+ ["[0]" header (.only Headers)]
[// (.only URL)]])
(type .public (Client !)
(Interface
- (is (-> //.Method URL //.Headers (Maybe Binary)
+ (is (-> //.Method URL Headers (Maybe Binary)
(! (Try (//.Response !))))
request)))
@@ -44,7 +45,7 @@
[(with_expansions [<name> (method_function <method>)]
(def .public (<name> url headers data client)
(All (_ !)
- (-> URL //.Headers (Maybe Binary) (Client !)
+ (-> URL Headers (Maybe Binary) (Client !)
(! (Try (//.Response !)))))
(at client request {<method>} url headers data)))]
@@ -173,9 +174,9 @@
output))))))))))
(def (default_headers connection)
- (-> java/net/HttpURLConnection (IO (Try //.Headers)))
+ (-> java/net/HttpURLConnection (IO (Try Headers)))
(loop (again [index +0
- headers //.empty])
+ headers header.empty])
(do [! (try.with io.monad)]
[?name (java/net/URLConnection::getHeaderFieldKey (ffi.as_int index) connection)]
(when ?name
@@ -242,5 +243,5 @@
{try.#Failure error})))))))
(def .public headers
- (-> (List [Text Text]) //.Headers)
+ (-> (List [Text Text]) Headers)
(dictionary.of_list text.hash))
diff --git a/stdlib/source/library/lux/world/net/http/header.lux b/stdlib/source/library/lux/world/net/http/header.lux
index 91ad629a2..81c801924 100644
--- a/stdlib/source/library/lux/world/net/http/header.lux
+++ b/stdlib/source/library/lux/world/net/http/header.lux
@@ -1,35 +1,81 @@
(.require
[library
- [lux (.except)
+ [lux (.except has)
[control
- ["[0]" pipe]]
+ ["[0]" pipe]
+ ["[0]" try (.only Try)]
+ ["[0]" exception (.only Exception)]]
[data
[text
- ["%" \\format (.only format)]]
+ ["%" \\format]]
[collection
- ["[0]" dictionary (.only Dictionary)]]]]]
- [// (.only Header)
+ ["[0]" dictionary]]]
+ [math
+ [number
+ ["[0]" nat]]]
+ [world
+ ["[0]" environment
+ ["[1]" \\parser (.only Environment)]]]]]
+ [//
["[0]" mime (.only MIME)]
[// (.only URL)]])
-(def .public (has name value)
- (-> Text Text Header)
- (dictionary.revised' name ""
+(type .public Headers
+ Environment)
+
+(def .public empty
+ Headers
+ environment.empty)
+
+... https://developer.mozilla.org/en-US/docs/Glossary/HTTP_header
+(type .public (Header of)
+ (Record
+ [#name Text
+ #in (-> of Text)
+ #out (-> Text (Try of))]))
+
+(exception.def .public (unknown [name])
+ (Exception Text)
+ (exception.report
+ (list ["Name" (%.text name)])))
+
+(def .public (one header it)
+ (All (_ of)
+ (-> (Header of) Headers
+ (Try of)))
+ (when (dictionary.value (the #name header) it)
+ {.#Some raw}
+ ((the #out header) raw)
+
+ {.#None}
+ (exception.except ..unknown [(the #name header)])))
+
+(def .public (has header value)
+ (All (_ of)
+ (-> (Header of) of Headers
+ Headers))
+ (dictionary.revised' (the #name header) ""
(|>> (pipe.when
""
- value
+ ((the #in header) value)
previous
- (format previous "," value)))))
+ (%.format previous "," ((the #in header) value))))))
(def .public content_length
- (-> Nat Header)
- (|>> %.nat (..has "Content-Length")))
+ (Header Nat)
+ [#name "Content-Length"
+ #in (at nat.decimal encoded)
+ #out (at nat.decimal decoded)])
(def .public content_type
- (-> MIME Header)
- (|>> mime.name (..has "Content-Type")))
+ (Header MIME)
+ [#name "Content-Type"
+ #in mime.name
+ #out (|>> mime.mime {try.#Success})])
(def .public location
- (-> URL Header)
- (..has "Location"))
+ (Header URL)
+ [#name "Location"
+ #in (|>>)
+ #out (|>> {try.#Success})])
diff --git a/stdlib/source/library/lux/world/net/http/mime.lux b/stdlib/source/library/lux/world/net/http/mime.lux
index 76a1fe51f..0ff909b96 100644
--- a/stdlib/source/library/lux/world/net/http/mime.lux
+++ b/stdlib/source/library/lux/world/net/http/mime.lux
@@ -1,12 +1,16 @@
(.require
[library
[lux (.except)
+ [abstract
+ ["[0]" equivalence (.only Equivalence)]
+ ["[0]" hash (.only Hash)]]
[data
- ["[0]" text
- ["%" \\format (.only format)]
+ ["[0]" text (.only)
+ ["%" \\format]
["[0]" encoding (.only Encoding)]]]
- [type
- [primitive (.except)]]]])
+ [meta
+ [type
+ [primitive (.except)]]]]])
(primitive .public MIME
Text
@@ -18,6 +22,14 @@
(def .public name
(-> MIME Text)
(|>> representation))
+
+ (def .public equivalence
+ (Equivalence MIME)
+ (at equivalence.functor each ..name text.equivalence))
+
+ (def .public hash
+ (Hash MIME)
+ (at hash.functor each ..name text.hash))
)
... https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types
@@ -93,7 +105,7 @@
(def .public (text encoding)
(-> Encoding MIME)
- (..mime (format "text/plain; charset=" text.double_quote (encoding.name encoding) text.double_quote)))
+ (..mime (%.format "text/plain; charset=" text.double_quote (encoding.name encoding) text.double_quote)))
(def .public utf_8
MIME
diff --git a/stdlib/source/library/lux/world/net/http/status.lux b/stdlib/source/library/lux/world/net/http/status.lux
index 3a6b2fc67..b7b4151a9 100644
--- a/stdlib/source/library/lux/world/net/http/status.lux
+++ b/stdlib/source/library/lux/world/net/http/status.lux
@@ -1,7 +1,9 @@
(.require
[library
- [lux (.except)]]
- [// (.only Status)])
+ [lux (.except)]])
+
+(type .public Status
+ Nat)
... https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
(with_template [<status> <name>]