aboutsummaryrefslogtreecommitdiff
path: root/source/lux
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--source/lux/control/enum.lux2
-rw-r--r--source/lux/control/monad.lux1
-rw-r--r--source/lux/data/id.lux14
-rw-r--r--source/lux/data/list.lux27
-rw-r--r--source/lux/data/number/int.lux7
-rw-r--r--source/lux/data/number/real.lux7
-rw-r--r--source/lux/meta/ast.lux14
7 files changed, 42 insertions, 30 deletions
diff --git a/source/lux/control/enum.lux b/source/lux/control/enum.lux
index 34910c837..c54eab75b 100644
--- a/source/lux/control/enum.lux
+++ b/source/lux/control/enum.lux
@@ -10,7 +10,7 @@
(defsig #export (Enum e)
(: (Ord e) _ord)
(: (-> e e) succ)
- (: (-> e e) pre))
+ (: (-> e e) pred))
## [Functions]
(def #export (range' <= succ from to)
diff --git a/source/lux/control/monad.lux b/source/lux/control/monad.lux
index 883875a03..0c7827c34 100644
--- a/source/lux/control/monad.lux
+++ b/source/lux/control/monad.lux
@@ -60,7 +60,6 @@
_
(` (|> (~ value) ((~ g!map) (lambda [(~ var)] (~ body'))) (~ g!join)))
- ## (` (;|> (~ value) (F;map (;lambda [(~ var)] (~ body'))) (;:: ;;_functor) (;;join)))
))))
body
(reverse (as-pairs bindings)))]
diff --git a/source/lux/data/id.lux b/source/lux/data/id.lux
index 6b996cf1e..e4f2a775f 100644
--- a/source/lux/data/id.lux
+++ b/source/lux/data/id.lux
@@ -10,20 +10,18 @@
## [Types]
(deftype #export (Id a)
- (| (#Id a)))
+ a)
## [Structures]
(defstruct #export Id/Functor (Functor Id)
- (def (map f fa)
- (let [(#Id a) fa]
- (#Id (f a)))))
+ (def map id))
(defstruct #export Id/Monad (Monad Id)
(def _functor Id/Functor)
- (def (wrap a) (#Id a))
- (def (join mma) (let [(#Id ma) mma] ma)))
+ (def wrap id)
+ (def join id))
(defstruct #export Id/CoMonad (CoMonad Id)
(def _functor Id/Functor)
- (def (unwrap wa) (let [(#Id a) wa] a))
- (def (split wa) (#Id wa)))
+ (def unwrap id)
+ (def split id))
diff --git a/source/lux/data/list.lux b/source/lux/data/list.lux
index a6ca4e0f7..8a7f97698 100644
--- a/source/lux/data/list.lux
+++ b/source/lux/data/list.lux
@@ -311,19 +311,20 @@
## (#;Left "Wrong syntax for zip-with")))
## [Structures]
-## (defstruct #export (List/Eq eq) (All [a] (-> (Eq a) (Eq (List a))))
-## (def (= xs ys)
-## (case [xs ys]
-## [#;Nil #;Nil]
-## true
-
-## [(#;Cons x xs') (#;Cons y ys')]
-## (and (:: eq (E;= x y))
-## (= xs' ys'))
-
-## [_ _]
-## false
-## )))
+(defstruct #export (List/Eq eq)
+ (All [a] (-> (E;Eq a) (E;Eq (List a))))
+ (def (= xs ys)
+ (case [xs ys]
+ [#;Nil #;Nil]
+ true
+
+ [(#;Cons x xs') (#;Cons y ys')]
+ (and (:: eq (E;= x y))
+ (= xs' ys'))
+
+ [_ _]
+ false
+ )))
(defstruct #export List/Monoid (All [a]
(Monoid (List a)))
diff --git a/source/lux/data/number/int.lux b/source/lux/data/number/int.lux
index 2d94ad43b..20ea5fced 100644
--- a/source/lux/data/number/int.lux
+++ b/source/lux/data/number/int.lux
@@ -8,6 +8,7 @@
(monoid #as m)
(eq #as E)
(ord #as O)
+ (enum #as EN)
(bounded #as B)
(show #as S)))
@@ -56,6 +57,12 @@
[ Int/Ord Int Int/Eq _jvm_leq _jvm_llt _jvm_lgt])
+## Enum
+(defstruct Int/Enum (EN;Enum Int)
+ (def _ord Int/Ord)
+ (def succ (lambda [n] (:: Int/Number (N;+ n 1))))
+ (def pred (lambda [n] (:: Int/Number (N;- n 1)))))
+
## Bounded
(do-template [<name> <type> <top> <bottom>]
[(defstruct #export <name> (B;Bounded <type>)
diff --git a/source/lux/data/number/real.lux b/source/lux/data/number/real.lux
index 2b7090265..7301f2932 100644
--- a/source/lux/data/number/real.lux
+++ b/source/lux/data/number/real.lux
@@ -8,6 +8,7 @@
(monoid #as m)
(eq #as E)
(ord #as O)
+ (enum #as EN)
(bounded #as B)
(show #as S)))
@@ -56,6 +57,12 @@
[Real/Ord Real Real/Eq _jvm_deq _jvm_dlt _jvm_dgt])
+## Enum
+(defstruct Real/Enum (EN;Enum Real)
+ (def _ord Real/Ord)
+ (def succ (lambda [n] (:: Real/Number (N;+ n 1.0))))
+ (def pred (lambda [n] (:: Real/Number (N;- n 1.0)))))
+
## Bounded
(do-template [<name> <type> <top> <bottom>]
[(defstruct #export <name> (B;Bounded <type>)
diff --git a/source/lux/meta/ast.lux b/source/lux/meta/ast.lux
index 78882c854..8d649cf4a 100644
--- a/source/lux/meta/ast.lux
+++ b/source/lux/meta/ast.lux
@@ -10,9 +10,9 @@
(number int
real)
char
- (text #refer #all #open ("text:" Text/Monoid))
+ (text #refer (#only Text/Show Text/Eq) #open ("text:" Text/Monoid))
ident
- (list #refer (#only List interpose) #open ("" List/Functor List/Fold))
+ (list #refer #all #open ("" List/Functor))
)))
## [Types]
@@ -80,11 +80,11 @@
)))
## (defstruct #export AST/Eq (Eq AST)
-## (def (eq x y)
+## (def (= x y)
## (case [x y]
## (\template [<tag> <struct>]
-## [[(<tag> x') (<tag> y')]
-## (:: <struct> (E;eq x' y'))])
+## [[[_ (<tag> x')] [_ (<tag> y')]]
+## (:: <struct> (E;= x' y'))])
## [[#;BoolS Bool/Eq]
## [#;IntS Int/Eq]
## [#;RealS Real/Eq]
@@ -94,7 +94,7 @@
## [#;TagS Ident/Eq]]
## (\template [<tag>]
-## [[(<tag> xs') (<tag> ys')]
+## [[[_ (<tag> xs')] [_ (<tag> ys')]]
## (and (:: Int/Eq (E;= (size xs') (size ys')))
## (foldL (lambda [old [x' y']]
## (and old (= x' y')))
@@ -102,7 +102,7 @@
## (zip2 xs' ys')))])
## [[#;FormS] [#;TupleS]]
-## [(#;RecordS xs') (#;RecordS ys')]
+## [[_ (#;RecordS xs')] [_ (#;RecordS ys')]]
## (and (:: Int/Eq (E;= (size xs') (size ys')))
## (foldL (lambda [old [[xl' xr'] [yl' yr']]]
## (and old (= xl' yl') (= xr' yr')))