aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/documentation
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--stdlib/source/documentation/lux/debug.lux118
-rw-r--r--stdlib/source/documentation/lux/documentation.lux62
-rw-r--r--stdlib/source/documentation/lux/extension.lux55
-rw-r--r--stdlib/source/documentation/lux/ffi.js.lux91
-rw-r--r--stdlib/source/documentation/lux/ffi.jvm.lux579
-rw-r--r--stdlib/source/documentation/lux/ffi.lua.lux30
-rw-r--r--stdlib/source/documentation/lux/ffi.old.lux462
-rw-r--r--stdlib/source/documentation/lux/ffi.py.lux72
-rw-r--r--stdlib/source/documentation/lux/ffi.rb.lux49
-rw-r--r--stdlib/source/documentation/lux/program.lux28
-rw-r--r--stdlib/source/documentation/lux/static.lux92
-rw-r--r--stdlib/source/documentation/lux/test.lux199
-rw-r--r--stdlib/source/documentation/lux/type/unit.lux6
13 files changed, 834 insertions, 1009 deletions
diff --git a/stdlib/source/documentation/lux/debug.lux b/stdlib/source/documentation/lux/debug.lux
index 5a60f7012..b560b35fe 100644
--- a/stdlib/source/documentation/lux/debug.lux
+++ b/stdlib/source/documentation/lux/debug.lux
@@ -1,7 +1,7 @@
(.require
[library
[lux (.except private)
- ["$" documentation (.only documentation:)]
+ ["$" documentation]
[data
["[0]" text (.only \n)
["%" \\format (.only format)]]]
@@ -10,71 +10,65 @@
[\\library
["[0]" /]])
-(documentation: /.inspection
- "A best-effort attempt to generate a textual representation of a value, without knowing its type."
- [(inspection value)])
+(.def .public documentation
+ (.List $.Module)
+ ($.module /._
+ ""
+ [($.default /.cannot_represent_value)
+ ($.default /.type_hole)
+ ($.default /.unknown_local_binding)
-(documentation: /.representation
- "A best-effort attempt to generate a textual representation of a value, while knowing its type."
- [(representation type value)])
+ ($.documentation /.inspection
+ "A best-effort attempt to generate a textual representation of a value, without knowing its type."
+ [(inspection value)])
-(documentation: /.private
- "Allows access to un-exported definitions in other modules."
- ["Module A"
- (def .private (secret_definition input)
- (-> ??? ???)
- (foo (bar (baz input))))
- "Module B"
- ((/.private secret_definition) my_input)])
+ ($.documentation /.representation
+ "A best-effort attempt to generate a textual representation of a value, while knowing its type."
+ [(representation type value)])
-(documentation: /.log!
- "Prints/writes a message to standard output."
- [(log! message)])
+ ($.documentation /.private
+ "Allows access to un-exported definitions in other modules."
+ ["Module A"
+ (def .private (secret_definition input)
+ (-> ??? ???)
+ (foo (bar (baz input))))
+ "Module B"
+ ((/.private secret_definition) my_input)])
-(documentation: /.hole
- (format "A typed 'hole'."
- \n "Reveals the type expected of the expression that should go in the hole.")
- [(is (-> Nat Text)
- (function (_ number)
- (hole)))
- "=>"
- .Text])
+ ($.documentation /.log!
+ "Prints/writes a message to standard output."
+ [(log! message)])
-(documentation: /.here
- "Shows the names and values of local bindings available around the call to 'here'."
- [(let [foo 123
- bar +456
- baz +789.0]
- (is Any
- (here)))
- "=>"
- "foo: +123"
- "bar: +456"
- "baz: +789.0"
- []]
- ["Can optionally be given a list of definitions to focus on."
- "These definitions to focus on can include custom format to represent the values."
- (let [foo 123
- bar +456
- baz +789.0]
- (is Any
- (here [foo %.nat] baz)))
- "=>"
- "foo: 123"
- "baz: +789.0"
- []])
+ ($.documentation /.hole
+ (format "A typed 'hole'."
+ \n "Reveals the type expected of the expression that should go in the hole.")
+ [(is (-> Nat Text)
+ (function (_ number)
+ (hole)))
+ "=>"
+ .Text])
-(.def .public documentation
- (.List $.Module)
- ($.module /._
- ""
- [..inspection
- ..representation
- ..private
- ..log!
- ..hole
- ..here
- ($.default /.cannot_represent_value)
- ($.default /.type_hole)
- ($.default /.unknown_local_binding)]
+ ($.documentation /.here
+ "Shows the names and values of local bindings available around the call to 'here'."
+ [(let [foo 123
+ bar +456
+ baz +789.0]
+ (is Any
+ (here)))
+ "=>"
+ "foo: +123"
+ "bar: +456"
+ "baz: +789.0"
+ []]
+ ["Can optionally be given a list of definitions to focus on."
+ "These definitions to focus on can include custom format to represent the values."
+ (let [foo 123
+ bar +456
+ baz +789.0]
+ (is Any
+ (here [foo %.nat] baz)))
+ "=>"
+ "foo: 123"
+ "baz: +789.0"
+ []])]
[]))
diff --git a/stdlib/source/documentation/lux/documentation.lux b/stdlib/source/documentation/lux/documentation.lux
index c720ae97a..bdebfab7e 100644
--- a/stdlib/source/documentation/lux/documentation.lux
+++ b/stdlib/source/documentation/lux/documentation.lux
@@ -9,41 +9,31 @@
[\\library
["[0]" /]])
-(/.documentation: /.default
- ""
- [(is /.Definition
- (default ..definition))])
+(with_expansions [<default> (/.documentation /.default
+ ""
+ [(is /.Definition
+ (default ..definition))])
+ <documentation> (/.documentation /.documentation
+ ""
+ [<default>])
+ <all> (these (/.default /.unqualified_symbol)
+ (/.default /.Definition)
+ (/.default /.Module)
+ (/.default /.documentation)
-(/.documentation: /.documentation:
- ""
- [(documentation: /.default
- ""
- [(is /.Definition
- (default ..definition))])])
+ <default>
+ <documentation>)]
+ (.def .public documentation
+ (.List /.Module)
+ (/.module /._
+ ""
+ [<all>
-(/.documentation: /.module
- ""
- [(is (.List /.Module)
- (module /._
- ""
- [..default
- ..documentation:
- ..module
- (/.default /.unqualified_symbol)
- (/.default /.Definition)
- (/.default /.Module)
- (/.default /.documentation)]
- []))])
-
-(.def .public documentation
- (.List /.Module)
- (/.module /._
- ""
- [..default
- ..documentation:
- ..module
- (/.default /.unqualified_symbol)
- (/.default /.Definition)
- (/.default /.Module)
- (/.default /.documentation)]
- []))
+ (/.documentation /.module
+ ""
+ [(is (.List /.Module)
+ (module /._
+ ""
+ [<all>]
+ []))])]
+ [])))
diff --git a/stdlib/source/documentation/lux/extension.lux b/stdlib/source/documentation/lux/extension.lux
index 5dd79df31..729abbec5 100644
--- a/stdlib/source/documentation/lux/extension.lux
+++ b/stdlib/source/documentation/lux/extension.lux
@@ -1,7 +1,7 @@
(.require
[library
[lux (.except)
- ["$" documentation (.only documentation:)]
+ ["$" documentation]
["[0]" debug]
[data
[text
@@ -12,8 +12,6 @@
["[0]" template]
["[0]" code
["<[1]>" \\parser]]]
- ["@" target
- ["[0]" jvm]]
[tool
[compiler
["[0]" phase]
@@ -24,38 +22,29 @@
[\\library
["[0]" /]])
-(documentation: /.analysis
- "Mechanism for defining extensions to Lux's analysis/type-checking infrastructure."
- [(analysis ("my analysis" self phase archive [pass_through <code>.any])
- (phase archive pass_through))])
-
-(documentation: /.synthesis
- "Mechanism for defining extensions to Lux's synthesis/optimization infrastructure."
- [(synthesis ("my synthesis" self phase archive [pass_through <analysis>.any])
- (phase archive pass_through))])
-
-(documentation: /.generation
- ""
- [(generation ("my generation" self phase archive [pass_through <synthesis>.any])
- (for @.jvm
- (at phase.monad each (|>> {jvm.#Embedded}
- sequence.sequence)
- (phase archive pass_through))
- (phase archive pass_through)))])
-
-(documentation: /.declaration
- ""
- [(declaration ("my declaration" self phase archive [parameters (<>.some <code>.any)])
- (do phase.monad
- [.let [_ (debug.log! (format "Successfully installed declaration " (%.text self) "!"))]]
- (in declaration.no_requirements)))])
-
(.def .public documentation
(.List $.Module)
($.module /._
""
- [..analysis
- ..synthesis
- ..generation
- ..declaration]
+ [($.documentation /.analysis
+ "Mechanism for defining extensions to Lux's analysis/type-checking infrastructure."
+ [(analysis ("my analysis" self phase archive [pass_through <code>.any])
+ (phase archive pass_through))])
+
+ ($.documentation /.synthesis
+ "Mechanism for defining extensions to Lux's synthesis/optimization infrastructure."
+ [(synthesis ("my synthesis" self phase archive [pass_through <analysis>.any])
+ (phase archive pass_through))])
+
+ ($.documentation /.generation
+ ""
+ [(generation ("my generation" self phase archive [pass_through <synthesis>.any])
+ (phase archive pass_through))])
+
+ ($.documentation /.declaration
+ ""
+ [(declaration ("my declaration" self phase archive [parameters (<>.some <code>.any)])
+ (do phase.monad
+ [.let [_ (debug.log! (format "Successfully installed declaration " (%.text self) "!"))]]
+ (in declaration.no_requirements)))])]
[]))
diff --git a/stdlib/source/documentation/lux/ffi.js.lux b/stdlib/source/documentation/lux/ffi.js.lux
index 6797208c8..71bf8062d 100644
--- a/stdlib/source/documentation/lux/ffi.js.lux
+++ b/stdlib/source/documentation/lux/ffi.js.lux
@@ -1,7 +1,7 @@
(.require
[library
[lux (.except int char)
- ["$" documentation (.only documentation:)]
+ ["$" documentation]
[data
["[0]" text (.only \n)
["%" \\format (.only format)]]]
@@ -10,56 +10,11 @@
[\\library
["[0]" /]])
-(documentation: /.null
- "The null pointer.")
-
-(documentation: /.import
- "Easily import types, methods, functions and constants."
- [(import Uint8Array
- "[1]::[0]")
-
- (import TextEncoder
- "[1]::[0]"
- (new [/.String])
- (encode [/.String] Uint8Array))
-
- (import TextDecoder
- "[1]::[0]"
- (new [/.String])
- (decode [/.String] String))])
-
-(documentation: /.type_of
- "The type of an object, as text."
- [(= "boolean"
- (type_of #1))]
- [(= "number"
- (type_of +123.456))]
- [(= "string"
- (type_of "789"))]
- [(= "function"
- (type_of (function (_ value) value)))])
-
-(documentation: /.constant
- "Allows using definitions from the JavaScript host platform."
- [(constant .Frac [Math PI])])
-
-(documentation: /.closure
- (format "Allows defining closures/anonymous-functions in the form that JavaScript expects."
- \n "This is useful for adapting Lux functions for usage by JavaScript code.")
- [(is /.Function
- (closure [left right]
- (do_something (as Foo left) (as Bar right))))])
-
(.def .public documentation
(.List $.Module)
($.module /._
""
- [..null
- ..import
- ..type_of
- ..constant
- ..closure
- ($.default (/.Object brand))
+ [($.default (/.Object brand))
($.default /.Function)
($.default /.Symbol)
($.default /.Null)
@@ -70,5 +25,45 @@
($.default /.null?)
($.default /.on_browser?)
($.default /.on_nashorn?)
- ($.default /.on_node_js?)]
+ ($.default /.on_node_js?)
+
+ ($.documentation /.null
+ "The null pointer.")
+
+ ($.documentation /.import
+ "Easily import types, methods, functions and constants."
+ [(import Uint8Array
+ "[1]::[0]")
+
+ (import TextEncoder
+ "[1]::[0]"
+ (new [/.String])
+ (encode [/.String] Uint8Array))
+
+ (import TextDecoder
+ "[1]::[0]"
+ (new [/.String])
+ (decode [/.String] String))])
+
+ ($.documentation /.type_of
+ "The type of an object, as text."
+ [(= "boolean"
+ (type_of #1))]
+ [(= "number"
+ (type_of +123.456))]
+ [(= "string"
+ (type_of "789"))]
+ [(= "function"
+ (type_of (function (_ value) value)))])
+
+ ($.documentation /.constant
+ "Allows using definitions from the JavaScript host platform."
+ [(constant .Frac [Math PI])])
+
+ ($.documentation /.closure
+ (format "Allows defining closures/anonymous-functions in the form that JavaScript expects."
+ \n "This is useful for adapting Lux functions for usage by JavaScript code.")
+ [(is /.Function
+ (closure [left right]
+ (do_something (as Foo left) (as Bar right))))])]
[]))
diff --git a/stdlib/source/documentation/lux/ffi.jvm.lux b/stdlib/source/documentation/lux/ffi.jvm.lux
index da10cb3d6..436c252b6 100644
--- a/stdlib/source/documentation/lux/ffi.jvm.lux
+++ b/stdlib/source/documentation/lux/ffi.jvm.lux
@@ -1,7 +1,7 @@
(.require
[library
[lux (.except int char is as)
- ["$" documentation (.only documentation:)]
+ ["$" documentation]
[data
["[0]" text (.only \n)
["%" \\format (.only format)]]]
@@ -10,324 +10,259 @@
[\\library
["[0]" /]])
-(with_template [<name>]
- [(`` (documentation: <name>
- (format "The type of a (boxed) " (~~ (template.text [<name>])) " object.")))]
-
- [/.Boolean]
- [/.Byte]
- [/.Short]
- [/.Integer]
- [/.Long]
- [/.Float]
- [/.Double]
- [/.Character]
- )
-
-(with_template [<name>]
- [(`` (documentation: <name>
- (format "The type of an (unboxed) " (~~ (template.text [<name>])) " value.")))]
-
- [/.boolean]
- [/.byte]
- [/.short]
- [/.int]
- [/.long]
- [/.float]
- [/.double]
- [/.char]
- )
-
-(with_template [<name> <from> <to>]
- [(`` (documentation: <name>
- "Type converter."))]
-
- [/.byte_to_long Byte Long]
-
- [/.short_to_long Short Long]
-
- [/.double_to_int Double Integer]
- [/.double_to_long Double Long]
- [/.double_to_float Double Float]
-
- [/.float_to_int Float Integer]
- [/.float_to_long Float Long]
- [/.float_to_double Float Double]
-
- [/.int_to_byte Integer Byte]
- [/.int_to_short Integer Short]
- [/.int_to_long Integer Long]
- [/.int_to_float Integer Float]
- [/.int_to_double Integer Double]
- [/.int_to_char Integer Character]
-
- [/.long_to_byte Long Byte]
- [/.long_to_short Long Short]
- [/.long_to_int Long Integer]
- [/.long_to_float Long Float]
- [/.long_to_double Long Double]
-
- [/.char_to_byte Character Byte]
- [/.char_to_short Character Short]
- [/.char_to_int Character Integer]
- [/.char_to_long Character Long]
-
- [/.long_to_char Long Character]
- [/.byte_to_int Byte Integer]
- [/.short_to_int Short Integer]
- [/.byte_to_char Byte Character]
- [/.short_to_char Short Character]
- )
-
-(documentation: /.class
- "Allows defining JVM classes in Lux code."
- [(class "final" (TestClass A) [Runnable]
- ... Fields
- ("private" foo boolean)
- ("private" bar A)
- ("private" baz java/lang/Object)
- ... Methods
- ("public" [] (new [value A]) []
- (exec
- (:= ::foo #1)
- (:= ::bar value)
- (:= ::baz "")
- []))
- ("public" (virtual) java/lang/Object
- "")
- ("public" "static" (static) java/lang/Object
- "")
- (Runnable [] (run) void
- [])
- )
-
- "The tuple corresponds to parent interfaces."
- "An optional super-class can be specified before the tuple. If not specified, java.lang.Object will be assumed."
- "Fields and methods defined in the class can be used with special syntax."
- "For example:"
- "::resolved, for accessing the 'resolved' field."
- "(:= ::resolved #1) for modifying it."
- "(::new! []) for calling the class's constructor."
- "(::resolve! container [value]) for calling the 'resolve' method."])
-
-(documentation: /.interface
- "Allows defining JVM interfaces."
- [(interface TestInterface
- ([] foo [boolean String] void "throws" [Exception]))])
-
-(documentation: /.object
- "Allows defining anonymous classes."
- ["The 1st tuple corresponds to class-level type-variables."
- "The 2nd tuple corresponds to parent interfaces."
- "The 3rd tuple corresponds to arguments to the super class constructor."
- "An optional super-class can be specified before the 1st tuple. If not specified, java.lang.Object will be assumed."
- (object [] [Runnable]
- []
- (Runnable [] (run self) void
- (exec
- (do_something some_value)
- [])))])
-
-(documentation: /.null
- "The null pointer."
- [(null)])
-
-(documentation: /.null?
- "Test for the null pointer."
- [(= true
- (null? (null)))]
- [(= false
- (null? "YOLO"))])
-
-(documentation: /.???
- "Takes a (potentially null) ObjectType reference and creates a (Maybe ObjectType) for it."
- [(= (??? (is java/lang/String (null)))
- {.#None})]
- [(= (??? "YOLO")
- {.#Some "YOLO"})])
-
-(documentation: /.!!!
- (format "Takes a (Maybe ObjectType) and returns a ObjectType."
- \n "A .#None would get translated into a (null).")
- [(= (null)
- (!!! (??? (is java/lang/Thread (null)))))]
- [(= "foo"
- (!!! (??? "foo")))])
-
-(documentation: /.as
- (format "Checks whether an object is an instance of a particular class."
- \n "Caveat emptor: Cannot check for polymorphism, so avoid using parameterized classes.")
- [(case (as String "YOLO")
- {.#Some value_as_string}
- {.#None})])
-
-(documentation: /.synchronized
- "Evaluates body, while holding a lock on a given object."
- [(synchronized object_to_be_locked
- (exec
- (do something)
- (dosomething else)
- (finish the computation)))])
-
-(documentation: /.do_to
- "Call a variety of methods on an object. Then, return the object."
- [(do_to object
- (ClassName::method1 arg0 arg1 arg2)
- (ClassName::method2 arg3 arg4 arg5))])
-
-(documentation: /.import
- "Allows importing JVM classes, and using them as types."
- ["Their methods, fields and enum options can also be imported."
- (import java/lang/Object
- "[1]::[0]"
- (new [])
- (equals [java/lang/Object] boolean)
- (wait [int] "io" "try" void))]
- ["Special options can also be given for the return values."
- "'?' means that the values will be returned inside a Maybe type. That way, null becomes .#None."
- "'try' means that the computation might throw an exception, and the return value will be wrapped by the Try type."
- "'io' means the computation has side effects, and will be wrapped by the IO type."
- "These options must show up in the following order ['io' 'try' '?'] (although, each option can be used independently)."
- (import java/lang/String
- "[1]::[0]"
- (new [[byte]])
- ("static" valueOf [char] java/lang/String)
- ("static" valueOf "as" int_valueOf [int] java/lang/String))
-
- (import (java/util/List e)
- "[1]::[0]"
- (size [] int)
- (get [int] e))
-
- (import (java/util/ArrayList a)
- "[1]::[0]"
- ([T] toArray [[T]] [T]))]
- ["The class-type that is generated is of the fully-qualified name."
- "This avoids a clash between the java.util.List type, and Lux's own List type."
- "All enum options to be imported must be specified."
- (import java/lang/Character$UnicodeScript
- "[1]::[0]"
- ("enum" ARABIC CYRILLIC LATIN))]
- ["It should also be noted, the only types that may show up in method arguments or return values may be Java classes, arrays, primitives, void or type-vars."
- "Lux types, such as Maybe cannot be named (otherwise, they'd be confused for Java classes)."
- (import (lux/concurrency/async/JvmAsync A)
- "[1]::[0]"
- (resolve [A] boolean)
- (poll [] A)
- (wasResolved [] boolean)
- (waitOn [lux/Function] void)
- ("static" [A] make [A] (lux/concurrency/async/JvmAsync A)))]
- ["Also, the names of the imported members will look like Class::member"
- (java/lang/Object::new [])
- (java/lang/Object::equals [other_object] my_object)
- (java/util/List::size [] my_list)
- java/lang/Character$UnicodeScript::LATIN])
-
-(documentation: /.array
- "Create an array of the given type, with the given size."
- [(array java/lang/Object 10)])
-
-(documentation: /.length
- "Gives the length of an array."
- [(length my_array)])
-
-(documentation: /.read!
- "Loads an element from an array."
- [(read! 10 my_array)])
-
-(documentation: /.write!
- "Stores an element into an array."
- [(write! 10 my_object my_array)])
-
-(documentation: /.class_for
- "Loads the class as a java.lang.Class object."
- [(class_for java/lang/String)])
-
-(documentation: /.type
- ""
- [(is Type
- (type java/lang/String))])
-
-(documentation: /.is
- ""
- [(is java/lang/Object
- (is java/lang/String
- ???))])
-
-(.def .public documentation
- (.List $.Module)
- ($.module /._
- ""
- [..Boolean
- ..Byte
- ..Short
- ..Integer
- ..Long
- ..Float
- ..Double
- ..Character
-
- ..boolean
- ..byte
- ..short
- ..int
- ..long
- ..float
- ..double
- ..char
-
- ..byte_to_long
- ..short_to_long
- ..double_to_int
- ..double_to_long
- ..double_to_float
- ..float_to_int
- ..float_to_long
- ..float_to_double
- ..int_to_byte
- ..int_to_short
- ..int_to_long
- ..int_to_float
- ..int_to_double
- ..int_to_char
- ..long_to_byte
- ..long_to_short
- ..long_to_int
- ..long_to_float
- ..long_to_double
- ..char_to_byte
- ..char_to_short
- ..char_to_int
- ..char_to_long
- ..long_to_char
- ..byte_to_int
- ..short_to_int
- ..byte_to_char
- ..short_to_char
-
- ..class
- ..interface
- ..object
- ..null
- ..null?
- ..???
- ..!!!
- ..as
- ..synchronized
- ..do_to
- ..import
- ..array
- ..length
- ..read!
- ..write!
- ..class_for
- ..type
- ..is
- ($.default /.Privacy)
- ($.default /.State)
- ($.default /.Inheritance)
- ($.default /.class_names_cannot_contain_periods)
- ($.default /.class_name_cannot_be_a_type_variable)
- ($.default /.cannot_convert_to_jvm_type)
- ($.default /.cannot_cast_to_non_object)]
- []))
+(`` (.def .public documentation
+ (.List $.Module)
+ ($.module /._
+ ""
+ [($.default /.Privacy)
+ ($.default /.State)
+ ($.default /.Inheritance)
+ ($.default /.class_names_cannot_contain_periods)
+ ($.default /.class_name_cannot_be_a_type_variable)
+ ($.default /.cannot_convert_to_jvm_type)
+ ($.default /.cannot_cast_to_non_object)
+
+ (~~ (with_template [<name>]
+ [(`` ($.documentation <name>
+ (format "The type of a (boxed) " (~~ (template.text [<name>])) " object.")))]
+
+ [/.Boolean]
+ [/.Byte]
+ [/.Short]
+ [/.Integer]
+ [/.Long]
+ [/.Float]
+ [/.Double]
+ [/.Character]
+ ))
+
+ (~~ (with_template [<name>]
+ [(`` ($.documentation <name>
+ (format "The type of an (unboxed) " (~~ (template.text [<name>])) " value.")))]
+
+ [/.boolean]
+ [/.byte]
+ [/.short]
+ [/.int]
+ [/.long]
+ [/.float]
+ [/.double]
+ [/.char]
+ ))
+
+ (~~ (with_template [<name> <from> <to>]
+ [(`` ($.documentation <name>
+ "Type converter."))]
+
+ [/.byte_to_long Byte Long]
+
+ [/.short_to_long Short Long]
+
+ [/.double_to_int Double Integer]
+ [/.double_to_long Double Long]
+ [/.double_to_float Double Float]
+
+ [/.float_to_int Float Integer]
+ [/.float_to_long Float Long]
+ [/.float_to_double Float Double]
+
+ [/.int_to_byte Integer Byte]
+ [/.int_to_short Integer Short]
+ [/.int_to_long Integer Long]
+ [/.int_to_float Integer Float]
+ [/.int_to_double Integer Double]
+ [/.int_to_char Integer Character]
+
+ [/.long_to_byte Long Byte]
+ [/.long_to_short Long Short]
+ [/.long_to_int Long Integer]
+ [/.long_to_float Long Float]
+ [/.long_to_double Long Double]
+
+ [/.char_to_byte Character Byte]
+ [/.char_to_short Character Short]
+ [/.char_to_int Character Integer]
+ [/.char_to_long Character Long]
+
+ [/.long_to_char Long Character]
+ [/.byte_to_int Byte Integer]
+ [/.short_to_int Short Integer]
+ [/.byte_to_char Byte Character]
+ [/.short_to_char Short Character]
+ ))
+
+ ($.documentation /.class
+ "Allows defining JVM classes in Lux code."
+ [(class "final" (TestClass A) [Runnable]
+ ... Fields
+ ("private" foo boolean)
+ ("private" bar A)
+ ("private" baz java/lang/Object)
+ ... Methods
+ ("public" [] (new [value A]) []
+ (exec
+ (:= ::foo #1)
+ (:= ::bar value)
+ (:= ::baz "")
+ []))
+ ("public" (virtual) java/lang/Object
+ "")
+ ("public" "static" (static) java/lang/Object
+ "")
+ (Runnable [] (run) void
+ [])
+ )
+
+ "The tuple corresponds to parent interfaces."
+ "An optional super-class can be specified before the tuple. If not specified, java.lang.Object will be assumed."
+ "Fields and methods defined in the class can be used with special syntax."
+ "For example:"
+ "::resolved, for accessing the 'resolved' field."
+ "(:= ::resolved #1) for modifying it."
+ "(::new! []) for calling the class's constructor."
+ "(::resolve! container [value]) for calling the 'resolve' method."])
+
+ ($.documentation /.interface
+ "Allows defining JVM interfaces."
+ [(interface TestInterface
+ ([] foo [boolean String] void "throws" [Exception]))])
+
+ ($.documentation /.object
+ "Allows defining anonymous classes."
+ ["The 1st tuple corresponds to class-level type-variables."
+ "The 2nd tuple corresponds to parent interfaces."
+ "The 3rd tuple corresponds to arguments to the super class constructor."
+ "An optional super-class can be specified before the 1st tuple. If not specified, java.lang.Object will be assumed."
+ (object [] [Runnable]
+ []
+ (Runnable [] (run self) void
+ (exec
+ (do_something some_value)
+ [])))])
+
+ ($.documentation /.null
+ "The null pointer."
+ [(null)])
+
+ ($.documentation /.null?
+ "Test for the null pointer."
+ [(= true
+ (null? (null)))]
+ [(= false
+ (null? "YOLO"))])
+
+ ($.documentation /.???
+ "Takes a (potentially null) ObjectType reference and creates a (Maybe ObjectType) for it."
+ [(= (??? (is java/lang/String (null)))
+ {.#None})]
+ [(= (??? "YOLO")
+ {.#Some "YOLO"})])
+
+ ($.documentation /.!!!
+ (format "Takes a (Maybe ObjectType) and returns a ObjectType."
+ \n "A .#None would get translated into a (null).")
+ [(= (null)
+ (!!! (??? (is java/lang/Thread (null)))))]
+ [(= "foo"
+ (!!! (??? "foo")))])
+
+ ($.documentation /.as
+ (format "Checks whether an object is an instance of a particular class."
+ \n "Caveat emptor: Cannot check for polymorphism, so avoid using parameterized classes.")
+ [(case (as String "YOLO")
+ {.#Some value_as_string}
+ {.#None})])
+
+ ($.documentation /.synchronized
+ "Evaluates body, while holding a lock on a given object."
+ [(synchronized object_to_be_locked
+ (exec
+ (do something)
+ (dosomething else)
+ (finish the computation)))])
+
+ ($.documentation /.do_to
+ "Call a variety of methods on an object. Then, return the object."
+ [(do_to object
+ (ClassName::method1 arg0 arg1 arg2)
+ (ClassName::method2 arg3 arg4 arg5))])
+
+ ($.documentation /.import
+ "Allows importing JVM classes, and using them as types."
+ ["Their methods, fields and enum options can also be imported."
+ (import java/lang/Object
+ "[1]::[0]"
+ (new [])
+ (equals [java/lang/Object] boolean)
+ (wait [int] "io" "try" void))]
+ ["Special options can also be given for the return values."
+ "'?' means that the values will be returned inside a Maybe type. That way, null becomes .#None."
+ "'try' means that the computation might throw an exception, and the return value will be wrapped by the Try type."
+ "'io' means the computation has side effects, and will be wrapped by the IO type."
+ "These options must show up in the following order ['io' 'try' '?'] (although, each option can be used independently)."
+ (import java/lang/String
+ "[1]::[0]"
+ (new [[byte]])
+ ("static" valueOf [char] java/lang/String)
+ ("static" valueOf "as" int_valueOf [int] java/lang/String))
+
+ (import (java/util/List e)
+ "[1]::[0]"
+ (size [] int)
+ (get [int] e))
+
+ (import (java/util/ArrayList a)
+ "[1]::[0]"
+ ([T] toArray [[T]] [T]))]
+ ["The class-type that is generated is of the fully-qualified name."
+ "This avoids a clash between the java.util.List type, and Lux's own List type."
+ "All enum options to be imported must be specified."
+ (import java/lang/Character$UnicodeScript
+ "[1]::[0]"
+ ("enum" ARABIC CYRILLIC LATIN))]
+ ["It should also be noted, the only types that may show up in method arguments or return values may be Java classes, arrays, primitives, void or type-vars."
+ "Lux types, such as Maybe cannot be named (otherwise, they'd be confused for Java classes)."
+ (import (lux/concurrency/async/JvmAsync A)
+ "[1]::[0]"
+ (resolve [A] boolean)
+ (poll [] A)
+ (wasResolved [] boolean)
+ (waitOn [lux/Function] void)
+ ("static" [A] make [A] (lux/concurrency/async/JvmAsync A)))]
+ ["Also, the names of the imported members will look like Class::member"
+ (java/lang/Object::new [])
+ (java/lang/Object::equals [other_object] my_object)
+ (java/util/List::size [] my_list)
+ java/lang/Character$UnicodeScript::LATIN])
+
+ ($.documentation /.array
+ "Create an array of the given type, with the given size."
+ [(array java/lang/Object 10)])
+
+ ($.documentation /.length
+ "Gives the length of an array."
+ [(length my_array)])
+
+ ($.documentation /.read!
+ "Loads an element from an array."
+ [(read! 10 my_array)])
+
+ ($.documentation /.write!
+ "Stores an element into an array."
+ [(write! 10 my_object my_array)])
+
+ ($.documentation /.class_for
+ "Loads the class as a java.lang.Class object."
+ [(class_for java/lang/String)])
+
+ ($.documentation /.type
+ ""
+ [(is Type
+ (type java/lang/String))])
+
+ ($.documentation /.is
+ ""
+ [(is java/lang/Object
+ (is java/lang/String
+ ???))])]
+ [])))
diff --git a/stdlib/source/documentation/lux/ffi.lua.lux b/stdlib/source/documentation/lux/ffi.lua.lux
index 5edd5c9e0..4b5e478de 100644
--- a/stdlib/source/documentation/lux/ffi.lua.lux
+++ b/stdlib/source/documentation/lux/ffi.lua.lux
@@ -1,7 +1,7 @@
(.require
[library
[lux (.except int char)
- ["$" documentation (.only documentation:)]
+ ["$" documentation]
[data
["[0]" text (.only \n)
["%" \\format (.only format)]]]
@@ -10,29 +10,27 @@
[\\library
["[0]" /]])
-(documentation: /.import
- "Easily import types, methods, functions and constants."
- [(import (os/getenv [..String] "io" "?" ..String))])
-
-(documentation: /.closure
- (format "Allows defining closures/anonymous-functions in the form that Lua expects."
- \n "This is useful for adapting Lux functions for usage by Lua code.")
- [(is ..Function
- (closure [left right]
- (do_something (as Foo left) (as Bar right))))])
-
(.def .public documentation
(.List $.Module)
($.module /._
""
- [..import
- ..closure
- ($.default (/.Object brand))
+ [($.default (/.Object brand))
($.default /.Nil)
($.default /.Function)
($.default /.Table)
($.default /.Boolean)
($.default /.Integer)
($.default /.Float)
- ($.default /.String)]
+ ($.default /.String)
+
+ ($.documentation /.import
+ "Easily import types, methods, functions and constants."
+ [(import (os/getenv [..String] "io" "?" ..String))])
+
+ ($.documentation /.closure
+ (format "Allows defining closures/anonymous-functions in the form that Lua expects."
+ \n "This is useful for adapting Lux functions for usage by Lua code.")
+ [(is ..Function
+ (closure [left right]
+ (do_something (as Foo left) (as Bar right))))])]
[]))
diff --git a/stdlib/source/documentation/lux/ffi.old.lux b/stdlib/source/documentation/lux/ffi.old.lux
index 805f9ec8c..460e8512e 100644
--- a/stdlib/source/documentation/lux/ffi.old.lux
+++ b/stdlib/source/documentation/lux/ffi.old.lux
@@ -1,7 +1,7 @@
(.require
[library
[lux (.except int char)
- ["$" documentation (.only documentation:)]
+ ["$" documentation]
[data
["[0]" text (.only \n)
["%" \\format (.only format)]]]
@@ -10,253 +10,213 @@
[\\library
["[0]" /]])
-(with_template [<name> <from> <to>]
- [(documentation: <name>
- "Type converter.")]
-
- [/.byte_to_long "java.lang.Byte" "java.lang.Long"]
-
- [/.short_to_long "java.lang.Short" "java.lang.Long"]
-
- [/.double_to_int "java.lang.Double" "java.lang.Integer"]
- [/.double_to_long "java.lang.Double" "java.lang.Long"]
- [/.double_to_float "java.lang.Double" "java.lang.Float"]
-
- [/.float_to_int "java.lang.Float" "java.lang.Integer"]
- [/.float_to_long "java.lang.Float" "java.lang.Long"]
- [/.float_to_double "java.lang.Float" "java.lang.Double"]
-
- [/.int_to_byte "java.lang.Integer" "java.lang.Byte"]
- [/.int_to_short "java.lang.Integer" "java.lang.Short"]
- [/.int_to_long "java.lang.Integer" "java.lang.Long"]
- [/.int_to_float "java.lang.Integer" "java.lang.Float"]
- [/.int_to_double "java.lang.Integer" "java.lang.Double"]
- [/.int_to_char "java.lang.Integer" "java.lang.Character"]
-
- [/.long_to_byte "java.lang.Long" "java.lang.Byte"]
- [/.long_to_short "java.lang.Long" "java.lang.Short"]
- [/.long_to_int "java.lang.Long" "java.lang.Integer"]
- [/.long_to_float "java.lang.Long" "java.lang.Float"]
- [/.long_to_double "java.lang.Long" "java.lang.Double"]
-
- [/.char_to_byte "java.lang.Character" "java.lang.Byte"]
- [/.char_to_short "java.lang.Character" "java.lang.Short"]
- [/.char_to_int "java.lang.Character" "java.lang.Integer"]
- [/.char_to_long "java.lang.Character" "java.lang.Long"]
- )
-
-(documentation: /.class
- "Allows defining JVM classes in Lux code."
- [(class "final" (TestClass A) [Runnable]
- ... Fields
- ("private" foo boolean)
- ("private" bar A)
- ("private" baz java/lang/Object)
- ... Methods
- ("public" [] (new [value A]) []
- (exec
- (:= ::foo #1)
- (:= ::bar value)
- (:= ::baz "")
- []))
- ("public" (virtual) java/lang/Object
- "")
- ("public" "static" (static) java/lang/Object
- "")
- (Runnable [] (run) void
- []))
- "The tuple corresponds to parent interfaces."
- "An optional super-class can be specified before the tuple. If not specified, java.lang.Object will be assumed."
- "Fields and methods defined in the class can be used with special syntax."
- "For example:"
- "::resolved, for accessing the 'resolved' field."
- "(:= ::resolved #1) for modifying it."
- "(::new! []) for calling the class's constructor."
- "(::resolve! container [value]) for calling the 'resolve' method."])
-
-(documentation: /.interface
- "Allows defining JVM interfaces."
- [(interface TestInterface
- ([] foo [boolean String] void "throws" [Exception]))])
-
-(documentation: /.object
- "Allows defining anonymous classes."
- ["The 1st tuple corresponds to class-level type-variables."
- "The 2nd tuple corresponds to parent interfaces."
- "The 3rd tuple corresponds to arguments to the super class constructor."
- "An optional super-class can be specified before the 1st tuple. If not specified, java.lang.Object will be assumed."
- (object [] [Runnable]
- []
- (Runnable [] (run self) void
- (exec (do_something some_value)
- [])))])
-
-(documentation: /.null
- "Null object reference."
- (null))
-
-(documentation: /.null?
- "Test for null object reference."
- [(= (null? (null))
- true)]
- [(= (null? "YOLO")
- false)])
-
-(documentation: /.???
- "Takes a (potentially null) ObjectType reference and creates a (Maybe ObjectType) for it."
- [(= (??? (is java/lang/String (null)))
- {.#None})]
- [(= (??? "YOLO")
- {.#Some "YOLO"})])
-
-(documentation: /.!!!
- "Takes a (Maybe ObjectType) and returns a ObjectType."
- [(= "foo"
- (!!! (??? "foo")))]
- ["A .#None would get translated into a (null)."
- (= (null)
- (!!! (??? (is java/lang/Thread (null)))))])
-
-(documentation: /.check
- (format "Checks whether an object is an instance of a particular class."
- \n "Caveat emptor: Cannot check for polymorphism, so avoid using parameterized classes.")
- [(case (check java/lang/String "YOLO")
- {.#Some value_as_string}
- {.#None})])
-
-(documentation: /.synchronized
- "Evaluates body, while holding a lock on a given object."
- [(synchronized object_to_be_locked
- (exec
- (do something)
- (do_something else)
- (finish the computation)))])
-
-(documentation: /.do_to
- "Call a variety of methods on an object. Then, return the object."
- [(do_to object
- (ClassName::method0 arg0 arg1 arg2)
- (ClassName::method1 arg3 arg4 arg5))])
-
-(documentation: /.import
- (format "Allows importing JVM classes, and using them as types."
- \n "Their methods, fields and enum options can also be imported.")
- [(import java/lang/Object
- "[1]::[0]"
- (new [])
- (equals [java/lang/Object] boolean)
- (wait [int] "io" "try" void))]
- ["Special options can also be given for the return values."
- "'?' means that the values will be returned inside a Maybe type. That way, null becomes .#None."
- "'try' means that the computation might throw an exception, and the return value will be wrapped by the Try type."
- "'io' means the computation has side effects, and will be wrapped by the IO type."
- "These options must show up in the following order ['io' 'try' '?'] (although, each option can be used independently)."
- (import java/lang/String
- "[1]::[0]"
- (new [[byte]])
- ("static" valueOf [char] java/lang/String)
- ("static" valueOf "as" int_valueOf [int] java/lang/String))
-
- (import (java/util/List e)
- "[1]::[0]"
- (size [] int)
- (get [int] e))
-
- (import (java/util/ArrayList a)
- "[1]::[0]"
- ([T] toArray [[T]] [T]))]
- ["The class-type that is generated is of the fully-qualified name."
- "This avoids a clash between the java.util.List type, and Lux's own List type."
- "All enum options to be imported must be specified."
- (import java/lang/Character$UnicodeScript
- "[1]::[0]"
- ("enum" ARABIC CYRILLIC LATIN))]
- ["It should also be noted, the only types that may show up in method arguments or return values may be Java classes, arrays, primitives, void or type-parameters."
- "Lux types, such as Maybe cannot be named (otherwise, they'd be confused for Java classes)."
- (import (lux/concurrency/async/JvmAsync A)
- "[1]::[0]"
- (resolve [A] boolean)
- (poll [] A)
- (wasResolved [] boolean)
- (waitOn [lux/Function] void)
- ("static" [A] make [A] (lux/concurrency/async/JvmAsync A)))]
- ["Also, the names of the imported members will look like Class::member"
- (java/lang/Object::new [])
- (java/lang/Object::equals [other_object] my_object)
- (java/util/List::size [] my_list)
- java/lang/Character$UnicodeScript::LATIN])
-
-(documentation: /.array
- "Create an array of the given type, with the given size."
- [(array java/lang/Object 10)])
-
-(documentation: /.length
- "Gives the length of an array."
- [(length my_array)])
-
-(documentation: /.read!
- "Loads an element from an array."
- [(read! 10 my_array)])
-
-(documentation: /.write!
- "Stores an element into an array."
- [(write! 10 my_object my_array)])
-
-(documentation: /.class_for
- "Loads the class as a java.lang.Class object."
- [(is (Primitive "java.lang.Class" ["java.lang.Object"])
- (class_for java/lang/String))])
-
-(documentation: /.type
- ""
- [(is .Type
- (type java/lang/String))])
-
-(.def .public documentation
- (.List $.Module)
- ($.module /._
- ""
- [..byte_to_long
- ..short_to_long
- ..double_to_int
- ..double_to_long
- ..double_to_float
- ..float_to_int
- ..float_to_long
- ..float_to_double
- ..int_to_byte
- ..int_to_short
- ..int_to_long
- ..int_to_float
- ..int_to_double
- ..int_to_char
- ..long_to_byte
- ..long_to_short
- ..long_to_int
- ..long_to_float
- ..long_to_double
- ..char_to_byte
- ..char_to_short
- ..char_to_int
- ..char_to_long
- ..class
- ..interface
- ..object
- ..null
- ..null?
- ..???
- ..!!!
- ..check
- ..synchronized
- ..do_to
- ..import
- ..array
- ..length
- ..read!
- ..write!
- ..class_for
- ..type
- ($.default /.Privacy)
- ($.default /.State)
- ($.default /.Inheritance)]
- []))
+(`` (.def .public documentation
+ (.List $.Module)
+ ($.module /._
+ ""
+ [($.default /.Privacy)
+ ($.default /.State)
+ ($.default /.Inheritance)
+
+ (~~ (with_template [<name> <from> <to>]
+ [($.documentation <name>
+ "Type converter.")]
+
+ [/.byte_to_long "java.lang.Byte" "java.lang.Long"]
+
+ [/.short_to_long "java.lang.Short" "java.lang.Long"]
+
+ [/.double_to_int "java.lang.Double" "java.lang.Integer"]
+ [/.double_to_long "java.lang.Double" "java.lang.Long"]
+ [/.double_to_float "java.lang.Double" "java.lang.Float"]
+
+ [/.float_to_int "java.lang.Float" "java.lang.Integer"]
+ [/.float_to_long "java.lang.Float" "java.lang.Long"]
+ [/.float_to_double "java.lang.Float" "java.lang.Double"]
+
+ [/.int_to_byte "java.lang.Integer" "java.lang.Byte"]
+ [/.int_to_short "java.lang.Integer" "java.lang.Short"]
+ [/.int_to_long "java.lang.Integer" "java.lang.Long"]
+ [/.int_to_float "java.lang.Integer" "java.lang.Float"]
+ [/.int_to_double "java.lang.Integer" "java.lang.Double"]
+ [/.int_to_char "java.lang.Integer" "java.lang.Character"]
+
+ [/.long_to_byte "java.lang.Long" "java.lang.Byte"]
+ [/.long_to_short "java.lang.Long" "java.lang.Short"]
+ [/.long_to_int "java.lang.Long" "java.lang.Integer"]
+ [/.long_to_float "java.lang.Long" "java.lang.Float"]
+ [/.long_to_double "java.lang.Long" "java.lang.Double"]
+
+ [/.char_to_byte "java.lang.Character" "java.lang.Byte"]
+ [/.char_to_short "java.lang.Character" "java.lang.Short"]
+ [/.char_to_int "java.lang.Character" "java.lang.Integer"]
+ [/.char_to_long "java.lang.Character" "java.lang.Long"]
+ ))
+
+ ($.documentation /.class
+ "Allows defining JVM classes in Lux code."
+ [(class "final" (TestClass A) [Runnable]
+ ... Fields
+ ("private" foo boolean)
+ ("private" bar A)
+ ("private" baz java/lang/Object)
+ ... Methods
+ ("public" [] (new [value A]) []
+ (exec
+ (:= ::foo #1)
+ (:= ::bar value)
+ (:= ::baz "")
+ []))
+ ("public" (virtual) java/lang/Object
+ "")
+ ("public" "static" (static) java/lang/Object
+ "")
+ (Runnable [] (run) void
+ []))
+ "The tuple corresponds to parent interfaces."
+ "An optional super-class can be specified before the tuple. If not specified, java.lang.Object will be assumed."
+ "Fields and methods defined in the class can be used with special syntax."
+ "For example:"
+ "::resolved, for accessing the 'resolved' field."
+ "(:= ::resolved #1) for modifying it."
+ "(::new! []) for calling the class's constructor."
+ "(::resolve! container [value]) for calling the 'resolve' method."])
+
+ ($.documentation /.interface
+ "Allows defining JVM interfaces."
+ [(interface TestInterface
+ ([] foo [boolean String] void "throws" [Exception]))])
+
+ ($.documentation /.object
+ "Allows defining anonymous classes."
+ ["The 1st tuple corresponds to class-level type-variables."
+ "The 2nd tuple corresponds to parent interfaces."
+ "The 3rd tuple corresponds to arguments to the super class constructor."
+ "An optional super-class can be specified before the 1st tuple. If not specified, java.lang.Object will be assumed."
+ (object [] [Runnable]
+ []
+ (Runnable [] (run self) void
+ (exec (do_something some_value)
+ [])))])
+
+ ($.documentation /.null
+ "Null object reference."
+ (null))
+
+ ($.documentation /.null?
+ "Test for null object reference."
+ [(= (null? (null))
+ true)]
+ [(= (null? "YOLO")
+ false)])
+
+ ($.documentation /.???
+ "Takes a (potentially null) ObjectType reference and creates a (Maybe ObjectType) for it."
+ [(= (??? (is java/lang/String (null)))
+ {.#None})]
+ [(= (??? "YOLO")
+ {.#Some "YOLO"})])
+
+ ($.documentation /.!!!
+ "Takes a (Maybe ObjectType) and returns a ObjectType."
+ [(= "foo"
+ (!!! (??? "foo")))]
+ ["A .#None would get translated into a (null)."
+ (= (null)
+ (!!! (??? (is java/lang/Thread (null)))))])
+
+ ($.documentation /.check
+ (format "Checks whether an object is an instance of a particular class."
+ \n "Caveat emptor: Cannot check for polymorphism, so avoid using parameterized classes.")
+ [(case (check java/lang/String "YOLO")
+ {.#Some value_as_string}
+ {.#None})])
+
+ ($.documentation /.synchronized
+ "Evaluates body, while holding a lock on a given object."
+ [(synchronized object_to_be_locked
+ (exec
+ (do something)
+ (do_something else)
+ (finish the computation)))])
+
+ ($.documentation /.do_to
+ "Call a variety of methods on an object. Then, return the object."
+ [(do_to object
+ (ClassName::method0 arg0 arg1 arg2)
+ (ClassName::method1 arg3 arg4 arg5))])
+
+ ($.documentation /.import
+ (format "Allows importing JVM classes, and using them as types."
+ \n "Their methods, fields and enum options can also be imported.")
+ [(import java/lang/Object
+ "[1]::[0]"
+ (new [])
+ (equals [java/lang/Object] boolean)
+ (wait [int] "io" "try" void))]
+ ["Special options can also be given for the return values."
+ "'?' means that the values will be returned inside a Maybe type. That way, null becomes .#None."
+ "'try' means that the computation might throw an exception, and the return value will be wrapped by the Try type."
+ "'io' means the computation has side effects, and will be wrapped by the IO type."
+ "These options must show up in the following order ['io' 'try' '?'] (although, each option can be used independently)."
+ (import java/lang/String
+ "[1]::[0]"
+ (new [[byte]])
+ ("static" valueOf [char] java/lang/String)
+ ("static" valueOf "as" int_valueOf [int] java/lang/String))
+
+ (import (java/util/List e)
+ "[1]::[0]"
+ (size [] int)
+ (get [int] e))
+
+ (import (java/util/ArrayList a)
+ "[1]::[0]"
+ ([T] toArray [[T]] [T]))]
+ ["The class-type that is generated is of the fully-qualified name."
+ "This avoids a clash between the java.util.List type, and Lux's own List type."
+ "All enum options to be imported must be specified."
+ (import java/lang/Character$UnicodeScript
+ "[1]::[0]"
+ ("enum" ARABIC CYRILLIC LATIN))]
+ ["It should also be noted, the only types that may show up in method arguments or return values may be Java classes, arrays, primitives, void or type-parameters."
+ "Lux types, such as Maybe cannot be named (otherwise, they'd be confused for Java classes)."
+ (import (lux/concurrency/async/JvmAsync A)
+ "[1]::[0]"
+ (resolve [A] boolean)
+ (poll [] A)
+ (wasResolved [] boolean)
+ (waitOn [lux/Function] void)
+ ("static" [A] make [A] (lux/concurrency/async/JvmAsync A)))]
+ ["Also, the names of the imported members will look like Class::member"
+ (java/lang/Object::new [])
+ (java/lang/Object::equals [other_object] my_object)
+ (java/util/List::size [] my_list)
+ java/lang/Character$UnicodeScript::LATIN])
+
+ ($.documentation /.array
+ "Create an array of the given type, with the given size."
+ [(array java/lang/Object 10)])
+
+ ($.documentation /.length
+ "Gives the length of an array."
+ [(length my_array)])
+
+ ($.documentation /.read!
+ "Loads an element from an array."
+ [(read! 10 my_array)])
+
+ ($.documentation /.write!
+ "Stores an element into an array."
+ [(write! 10 my_object my_array)])
+
+ ($.documentation /.class_for
+ "Loads the class as a java.lang.Class object."
+ [(is (Primitive "java.lang.Class" ["java.lang.Object"])
+ (class_for java/lang/String))])
+
+ ($.documentation /.type
+ ""
+ [(is .Type
+ (type java/lang/String))])]
+ [])))
diff --git a/stdlib/source/documentation/lux/ffi.py.lux b/stdlib/source/documentation/lux/ffi.py.lux
index 3feb67e74..0d5a5771f 100644
--- a/stdlib/source/documentation/lux/ffi.py.lux
+++ b/stdlib/source/documentation/lux/ffi.py.lux
@@ -1,7 +1,7 @@
(.require
[library
[lux (.except int char)
- ["$" documentation (.only documentation:)]
+ ["$" documentation]
[data
["[0]" text (.only \n)
["%" \\format (.only format)]]]
@@ -10,50 +10,48 @@
[\\library
["[0]" /]])
-(documentation: /.import
- "Easily import types, methods, functions and constants."
- [(import os
- "[1]::[0]"
- ("static" F_OK Integer)
- ("static" R_OK Integer)
- ("static" W_OK Integer)
- ("static" X_OK Integer)
-
- ("static" mkdir [String] "io" "try" "?" Any)
- ("static" access [String Integer] "io" "try" Boolean)
- ("static" remove [String] "io" "try" "?" Any)
- ("static" rmdir [String] "io" "try" "?" Any)
- ("static" rename [String String] "io" "try" "?" Any)
- ("static" listdir [String] "io" "try" (Array String)))
-
- (import os/path
- "[1]::[0]"
- ("static" isfile [String] "io" "try" Boolean)
- ("static" isdir [String] "io" "try" Boolean)
- ("static" sep String)
- ("static" getsize [String] "io" "try" Integer)
- ("static" getmtime [String] "io" "try" Float))])
-
-(documentation: /.lambda
- (format "Allows defining closures/anonymous-functions in the form that Python expects."
- \n "This is useful for adapting Lux functions for usage by Python code.")
- [(is ..Function
- (lambda [left right]
- (do_something (as Foo left)
- (as Bar right))))])
-
(.def .public documentation
(.List $.Module)
($.module /._
""
- [..import
- ..lambda
- ($.default (/.Object brand))
+ [($.default (/.Object brand))
($.default /.None)
($.default /.Dict)
($.default /.Function)
($.default /.Boolean)
($.default /.Integer)
($.default /.Float)
- ($.default /.String)]
+ ($.default /.String)
+
+ ($.documentation /.import
+ "Easily import types, methods, functions and constants."
+ [(import os
+ "[1]::[0]"
+ ("static" F_OK Integer)
+ ("static" R_OK Integer)
+ ("static" W_OK Integer)
+ ("static" X_OK Integer)
+
+ ("static" mkdir [String] "io" "try" "?" Any)
+ ("static" access [String Integer] "io" "try" Boolean)
+ ("static" remove [String] "io" "try" "?" Any)
+ ("static" rmdir [String] "io" "try" "?" Any)
+ ("static" rename [String String] "io" "try" "?" Any)
+ ("static" listdir [String] "io" "try" (Array String)))
+
+ (import os/path
+ "[1]::[0]"
+ ("static" isfile [String] "io" "try" Boolean)
+ ("static" isdir [String] "io" "try" Boolean)
+ ("static" sep String)
+ ("static" getsize [String] "io" "try" Integer)
+ ("static" getmtime [String] "io" "try" Float))])
+
+ ($.documentation /.lambda
+ (format "Allows defining closures/anonymous-functions in the form that Python expects."
+ \n "This is useful for adapting Lux functions for usage by Python code.")
+ [(is ..Function
+ (lambda [left right]
+ (do_something (as Foo left)
+ (as Bar right))))])]
[]))
diff --git a/stdlib/source/documentation/lux/ffi.rb.lux b/stdlib/source/documentation/lux/ffi.rb.lux
index 86cff83d3..3ea02446e 100644
--- a/stdlib/source/documentation/lux/ffi.rb.lux
+++ b/stdlib/source/documentation/lux/ffi.rb.lux
@@ -1,7 +1,7 @@
(.require
[library
[lux (.except int char)
- ["$" documentation (.only documentation:)]
+ ["$" documentation]
[data
["[0]" text (.only \n)
["%" \\format (.only format)]]]
@@ -10,36 +10,35 @@
[\\library
["[0]" /]])
-(documentation: /.import
- "Easily import types, methods, functions and constants."
- [(import Stat
- "[1]::[0]"
- (executable? [] Bit)
- (size Int))
-
- (import File "as" RubyFile
- "[1]::[0]"
- ("static" SEPARATOR ..String)
- ("static" open [Path ..String] "io" "try" RubyFile)
- ("static" stat [Path] "io" "try" Stat)
- ("static" delete [Path] "io" "try" Int)
- ("static" file? [Path] "io" "try" Bit)
- ("static" directory? [Path] "io" "try" Bit)
-
- (read [] "io" "try" Binary)
- (write [Binary] "io" "try" Int)
- (flush [] "io" "try" "?" Any)
- (close [] "io" "try" "?" Any))])
-
(.def .public documentation
(.List $.Module)
($.module /._
""
- [..import
- ($.default (/.Object brand))
+ [($.default (/.Object brand))
($.default /.Nil)
($.default /.Function)
($.default /.Integer)
($.default /.Float)
- ($.default /.String)]
+ ($.default /.String)
+
+ ($.documentation /.import
+ "Easily import types, methods, functions and constants."
+ [(import Stat
+ "[1]::[0]"
+ (executable? [] Bit)
+ (size Int))
+
+ (import File "as" RubyFile
+ "[1]::[0]"
+ ("static" SEPARATOR ..String)
+ ("static" open [Path ..String] "io" "try" RubyFile)
+ ("static" stat [Path] "io" "try" Stat)
+ ("static" delete [Path] "io" "try" Int)
+ ("static" file? [Path] "io" "try" Bit)
+ ("static" directory? [Path] "io" "try" Bit)
+
+ (read [] "io" "try" Binary)
+ (write [Binary] "io" "try" Int)
+ (flush [] "io" "try" "?" Any)
+ (close [] "io" "try" "?" Any))])]
[]))
diff --git a/stdlib/source/documentation/lux/program.lux b/stdlib/source/documentation/lux/program.lux
index e6301fc55..fc830b881 100644
--- a/stdlib/source/documentation/lux/program.lux
+++ b/stdlib/source/documentation/lux/program.lux
@@ -1,7 +1,7 @@
(.require
[library
[lux (.except)
- ["$" documentation (.only documentation:)]
+ ["$" documentation]
[control
["[0]" io]]
[data
@@ -12,22 +12,20 @@
[\\library
["[0]" /]])
-(documentation: /.program:
- "Defines the entry-point to a program (similar to the 'main' function/method in other programming languages)."
- ["Can take a list of all the input parameters to the program."
- (program: all_arguments
- (do io.monad
- [foo (initialize program)]
- (do_something_with all_arguments)))]
- ["Can also parse them using CLI parsers from the library/lux/control/parser/cli module."
- (program: [config configuration_parser]
- (do io.monad
- [data (initialize program with config)]
- (do_something_with data)))])
-
(.def .public documentation
(.List $.Module)
($.module /._
""
- [..program:]
+ [($.documentation /.program:
+ "Defines the entry-point to a program (similar to the 'main' function/method in other programming languages)."
+ ["Can take a list of all the input parameters to the program."
+ (program: all_arguments
+ (do io.monad
+ [foo (initialize program)]
+ (do_something_with all_arguments)))]
+ ["Can also parse them using CLI parsers from the library/lux/control/parser/cli module."
+ (program: [config configuration_parser]
+ (do io.monad
+ [data (initialize program with config)]
+ (do_something_with data)))])]
[]))
diff --git a/stdlib/source/documentation/lux/static.lux b/stdlib/source/documentation/lux/static.lux
index aa11a339e..08b82e86c 100644
--- a/stdlib/source/documentation/lux/static.lux
+++ b/stdlib/source/documentation/lux/static.lux
@@ -1,7 +1,7 @@
(.require
[library
[lux (.except nat int rev)
- ["$" documentation (.only documentation:)]
+ ["$" documentation]
[data
[text
["%" \\format (.only format)]]
@@ -10,59 +10,47 @@
[\\library
["[0]" /]])
-(with_template [<name> <type>]
- [(documentation: <name>
- (%.code (' (<name>
- (is <type>
- (value generating expression))))))]
+(`` (.def .public documentation
+ (.List $.Module)
+ ($.module /._
+ ""
+ [(~~ (with_template [<name> <type>]
+ [($.documentation <name>
+ (%.code (' (<name>
+ (is <type>
+ (value generating expression))))))]
- [/.nat .Nat]
- [/.int .Int]
- [/.rev .Rev]
- [/.frac .Frac]
- [/.text .Text]
- )
+ [/.nat .Nat]
+ [/.int .Int]
+ [/.rev .Rev]
+ [/.frac .Frac]
+ [/.text .Text]
+ ))
-(documentation: /.literal
- ""
- [(/.literal
- (is (-> ??? Code)
- format)
- (is ???
- (value generating expression)))])
+ ($.documentation /.literal
+ ""
+ [(/.literal
+ (is (-> ??? Code)
+ format)
+ (is ???
+ (value generating expression)))])
-(with_template [<name> <type>]
- [(documentation: <name>
- (%.code (' (is <type>
- (<name>)))))]
+ (~~ (with_template [<name> <type>]
+ [($.documentation <name>
+ (%.code (' (is <type>
+ (<name>)))))]
- [/.random_nat .Nat]
- [/.random_int .Int]
- [/.random_rev .Rev]
- [/.random_frac .Frac]
- )
+ [/.random_nat .Nat]
+ [/.random_int .Int]
+ [/.random_rev .Rev]
+ [/.random_frac .Frac]
+ ))
-(documentation: /.random
- ""
- [(/.random
- (is (-> ??? Code)
- format)
- (is (Random ???)
- (random data generator)))])
-
-(.def .public documentation
- (.List $.Module)
- ($.module /._
- ""
- [..nat
- ..int
- ..rev
- ..frac
- ..text
- ..literal
- ..random_nat
- ..random_int
- ..random_rev
- ..random_frac
- ..random]
- []))
+ ($.documentation /.random
+ ""
+ [(/.random
+ (is (-> ??? Code)
+ format)
+ (is (Random ???)
+ (random data generator)))])]
+ [])))
diff --git a/stdlib/source/documentation/lux/test.lux b/stdlib/source/documentation/lux/test.lux
index b9196ae25..f15eacf9d 100644
--- a/stdlib/source/documentation/lux/test.lux
+++ b/stdlib/source/documentation/lux/test.lux
@@ -1,7 +1,7 @@
(.require
[library
[lux (.except and for)
- ["$" documentation (.only documentation:)]
+ ["$" documentation]
[data
["[0]" text (.only \n)
["%" \\format (.only format)]]]
@@ -10,116 +10,97 @@
[\\library
["[0]" /]])
-(documentation: /.Tally
- "A record of successes and failures while executing tests.")
-
-(documentation: /.Assertion
- "An asynchronous operation that yields test results.")
-
-(documentation: /.Test
- "A test that relies on random data generation to thoroughly cover different scenarios.")
-
-(documentation: /.and'
- "Sequencing combinator (for assertions)."
- [(and' left right)])
-
-(documentation: /.and
- "Sequencing combinator."
- [(and left right)])
-
-(documentation: /.context
- "Adds a contextual description to a test's documentation."
- [(context description)])
-
-(documentation: /.failure
- "A failing test, with a given error message.")
-
-(documentation: /.assertion
- "Check that a condition is #1, and fail with the given message otherwise."
- [(assertion message condition)])
-
-(documentation: /.property
- "Check that a condition is #1, and fail with the given message otherwise."
- [(property message condition)])
-
-(documentation: /.lifted
- ""
- [(lifted message random)])
-
-(documentation: /.Seed
- "The seed value used for random testing (if that feature is used).")
-
-(documentation: /.seed
- (format "Execute the given test with a specific seed value."
- \n "This allows you to reproduce a failing test case as many times as you want while debugging.")
- [(seed value test)])
-
-(documentation: /.times
- (format "Allows executing a test several times."
- \n "By doing this, it's possible to thoroughly test code with many different scenarios."
- \n "This assumes that random data generation is being used in tests instead of fixed/constant inputs.")
- [(times amount test)])
-
-(documentation: /.run!
- (format "Executes a test, and exits the program with either a successful or a failing exit code."
- \n "WARNING: This procedure is only meant to be used in (program: ...) forms.")
- [(run! test)])
-
-(documentation: /.coverage'
- (format "Specifies a test as covering one or more definitions."
- \n "Adds to the test tally information to track which definitions have been tested.")
- [(coverage' [definition/0 definition/1 ,,, definition/N]
- (is Bit
- (some "computation")))])
-
-(documentation: /.coverage
- (format "Specifies a test as covering one or more definitions."
- \n "Adds to the test tally information to track which definitions have been tested.")
- [(coverage [definition/0 definition/1 ,,, definition/N]
- (is Bit
- (some "computation")))])
-
-(documentation: /.for
- (format "Specifies a context for tests as covering one or more definitions."
- \n "Adds to the test tally information to track which definitions have been tested.")
- [(for [definition/0 definition/1 ,,, definition/N]
- (is Test
- some_test))])
-
-(documentation: /.covering
- (format "Specifies the module being covered by a test."
- \n "Adds tracking information to the tally to know which exported definitions in the module need to be covered.")
- [(covering .._
- (is Test
- some_test))])
-
-(documentation: /.in_parallel
- "Executes multiple tests in parallel (if the host platform supports it) to take advantage of multiple cores."
- [(in_parallel tests)])
-
(.def .public documentation
(.List $.Module)
($.module /._
"Tools for unit & property-based/generative testing."
- [..Tally
- ..Assertion
- ..Test
- ..and'
- ..and
- ..context
- ..failure
- ..assertion
- ..property
- ..lifted
- ..Seed
- ..seed
- ..times
- ..run!
- ..coverage'
- ..coverage
- ..for
- ..covering
- ..in_parallel
- ($.default /.must_try_test_at_least_once)
- ($.default /.error_during_execution)]
+ [($.default /.must_try_test_at_least_once)
+ ($.default /.error_during_execution)
+
+ ($.documentation /.Tally
+ "A record of successes and failures while executing tests.")
+
+ ($.documentation /.Assertion
+ "An asynchronous operation that yields test results.")
+
+ ($.documentation /.Test
+ "A test that relies on random data generation to thoroughly cover different scenarios.")
+
+ ($.documentation /.and'
+ "Sequencing combinator (for assertions)."
+ [(and' left right)])
+
+ ($.documentation /.and
+ "Sequencing combinator."
+ [(and left right)])
+
+ ($.documentation /.context
+ "Adds a contextual description to a test's documentation."
+ [(context description)])
+
+ ($.documentation /.failure
+ "A failing test, with a given error message.")
+
+ ($.documentation /.assertion
+ "Check that a condition is #1, and fail with the given message otherwise."
+ [(assertion message condition)])
+
+ ($.documentation /.property
+ "Check that a condition is #1, and fail with the given message otherwise."
+ [(property message condition)])
+
+ ($.documentation /.lifted
+ ""
+ [(lifted message random)])
+
+ ($.documentation /.Seed
+ "The seed value used for random testing (if that feature is used).")
+
+ ($.documentation /.seed
+ (format "Execute the given test with a specific seed value."
+ \n "This allows you to reproduce a failing test case as many times as you want while debugging.")
+ [(seed value test)])
+
+ ($.documentation /.times
+ (format "Allows executing a test several times."
+ \n "By doing this, it's possible to thoroughly test code with many different scenarios."
+ \n "This assumes that random data generation is being used in tests instead of fixed/constant inputs.")
+ [(times amount test)])
+
+ ($.documentation /.run!
+ (format "Executes a test, and exits the program with either a successful or a failing exit code."
+ \n "WARNING: This procedure is only meant to be used in (program: ...) forms.")
+ [(run! test)])
+
+ ($.documentation /.coverage'
+ (format "Specifies a test as covering one or more definitions."
+ \n "Adds to the test tally information to track which definitions have been tested.")
+ [(coverage' [definition/0 definition/1 ,,, definition/N]
+ (is Bit
+ (some "computation")))])
+
+ ($.documentation /.coverage
+ (format "Specifies a test as covering one or more definitions."
+ \n "Adds to the test tally information to track which definitions have been tested.")
+ [(coverage [definition/0 definition/1 ,,, definition/N]
+ (is Bit
+ (some "computation")))])
+
+ ($.documentation /.for
+ (format "Specifies a context for tests as covering one or more definitions."
+ \n "Adds to the test tally information to track which definitions have been tested.")
+ [(for [definition/0 definition/1 ,,, definition/N]
+ (is Test
+ some_test))])
+
+ ($.documentation /.covering
+ (format "Specifies the module being covered by a test."
+ \n "Adds tracking information to the tally to know which exported definitions in the module need to be covered.")
+ [(covering .._
+ (is Test
+ some_test))])
+
+ ($.documentation /.in_parallel
+ "Executes multiple tests in parallel (if the host platform supports it) to take advantage of multiple cores."
+ [(in_parallel tests)])]
[]))
diff --git a/stdlib/source/documentation/lux/type/unit.lux b/stdlib/source/documentation/lux/type/unit.lux
index 204154496..c7f4948ab 100644
--- a/stdlib/source/documentation/lux/type/unit.lux
+++ b/stdlib/source/documentation/lux/type/unit.lux
@@ -37,7 +37,7 @@
($.default /.*)
($.default /./)
- ($.documentation (/.Qty unit)
+ ($.documentation (/.Measure unit)
"A quantity with an associated unit of measurement.")
($.documentation (/.Unit unit)
@@ -47,7 +47,7 @@
"A scale of magnitude.")
($.documentation /.Pure
- "A pure, unit-less quantity.")
+ "A pure, unit-less measure.")
($.documentation /.unit
(format "Define a unit of measurement."
@@ -60,7 +60,7 @@
($.documentation /.re_scaled
""
- [(re_scaled from to quantity)])
+ [(re_scaled from to measure)])
(~~ (with_template [<type> <scale>]
[(`` ($.documentation <scale>