From a268b8e66fbb5ad51e053bbb9a334a6460602aed Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Thu, 10 May 2018 21:42:17 -0400 Subject: - Some improvements and fixes for stdlib. --- stdlib/source/lux/data/format/json.lux | 5 +-- stdlib/source/lux/io.lux | 4 +++ stdlib/source/lux/macro/poly.lux | 62 ++++++++-------------------------- stdlib/source/lux/macro/poly/eq.lux | 12 +++---- stdlib/source/lux/macro/poly/json.lux | 33 +++++++++--------- stdlib/source/lux/test.lux | 5 +-- stdlib/test/tests.lux | 6 ++-- 7 files changed, 50 insertions(+), 77 deletions(-) diff --git a/stdlib/source/lux/data/format/json.lux b/stdlib/source/lux/data/format/json.lux index c4dd43a1c..d960830db 100644 --- a/stdlib/source/lux/data/format/json.lux +++ b/stdlib/source/lux/data/format/json.lux @@ -19,10 +19,7 @@ (dictionary ["dict" unordered #+ Dict]))) [macro #+ Monad with-gensyms] (macro ["s" syntax #+ syntax:] - [code] - [poly #+ poly:]) - (lang [type]) - )) + [code]))) (do-template [ ] [(type: #export )] diff --git a/stdlib/source/lux/io.lux b/stdlib/source/lux/io.lux index 72307c301..d35584fd1 100644 --- a/stdlib/source/lux/io.lux +++ b/stdlib/source/lux/io.lux @@ -49,6 +49,10 @@ (All [a] (-> (IO a) a)) (action (:! Bottom []))) +(def: #export (exit code) + (-> Int (IO Bottom)) + (io ("lux io exit" code))) + ## Process (type: #export (Process a) (IO (Error a))) diff --git a/stdlib/source/lux/macro/poly.lux b/stdlib/source/lux/macro/poly.lux index f3537d6f0..54a856463 100644 --- a/stdlib/source/lux/macro/poly.lux +++ b/stdlib/source/lux/macro/poly.lux @@ -115,43 +115,6 @@ (#e.Success [[_ inputs'] output]) (#e.Success [[env inputs'] [g!var output]]))))) -(do-template [ ] - [(def: #export - (Poly Top) - (do p.Monad - [headT any] - (case (type.un-name headT) - - (wrap []) - - _ - (p.fail ($_ text/compose "Not " " type: " (type.to-text headT))))))] - - [bool "Bool" (#.Primitive "#Bool" #.Nil)] - [nat "Nat" (#.Primitive "#Nat" #.Nil)] - [int "Int" (#.Primitive "#Int" #.Nil)] - [deg "Deg" (#.Primitive "#Deg" #.Nil)] - [frac "Frac" (#.Primitive "#Frac" #.Nil)] - [text "Text" (#.Primitive "#Text" #.Nil)] - ) - -(def: #export basic - (Poly Type) - (do p.Monad - [headT any] - (case (run headT ($_ p.either - bool - nat - int - deg - frac - text)) - (#e.Error error) - (p.fail error) - - (#e.Success _) - (wrap headT)))) - (do-template [ ] [(def: #export ( poly) (All [a] (-> (Poly a) (Poly a))) @@ -231,16 +194,21 @@ (p.fail ($_ text/compose "Non-application type: " (type.to-text headT))) (local (#.Cons funcT paramsT) poly)))) -(def: #export (this expected) - (-> Type (Poly Top)) - (do p.Monad - [actual any] - (if (type/= expected actual) - (wrap []) - (p.fail ($_ text/compose - "Types do not match." "\n" - "Expected: " (type.to-text expected) "\n" - " Actual: " (type.to-text actual)))))) +(do-template [ ] + [(def: #export ( expected) + (-> Type (Poly Top)) + (do p.Monad + [actual any] + (if ( expected actual) + (wrap []) + (p.fail ($_ text/compose + "Types do not match." "\n" + "Expected: " (type.to-text expected) "\n" + " Actual: " (type.to-text actual))))))] + + [this type/=] + [like check.checks?] + ) (def: (adjusted-idx env idx) (-> Env Nat Nat) diff --git a/stdlib/source/lux/macro/poly/eq.lux b/stdlib/source/lux/macro/poly/eq.lux index 6206c9861..ec120e0e1 100644 --- a/stdlib/source/lux/macro/poly/eq.lux +++ b/stdlib/source/lux/macro/poly/eq.lux @@ -46,12 +46,12 @@ ))))] [(poly.this Top) (function ((~ g!_) (~ g!_) (~ g!_)) true)] - [poly.bool bool.Eq] - [poly.nat number.Eq] - [poly.int number.Eq] - [poly.deg number.Eq] - [poly.frac number.Eq] - [poly.text text.Eq])) + [(poly.like Bool) bool.Eq] + [(poly.like Nat) number.Eq] + [(poly.like Int) number.Eq] + [(poly.like Deg) number.Eq] + [(poly.like Frac) number.Eq] + [(poly.like Text) text.Eq])) ## Composite types (~~ (do-template [ ] [(do @ diff --git a/stdlib/source/lux/macro/poly/json.lux b/stdlib/source/lux/macro/poly/json.lux index 2e288648e..44075647d 100644 --- a/stdlib/source/lux/macro/poly/json.lux +++ b/stdlib/source/lux/macro/poly/json.lux @@ -6,8 +6,9 @@ ["p" parser "p/" Monad]) (data [bool] [bit] - [text "text/" Eq Monoid] - (text ["l" lexer]) + [text "text/" Eq] + (text ["l" lexer] + format) [number "frac/" Codec "nat/" Codec] maybe ["e" error] @@ -87,11 +88,11 @@ ))))] [(poly.this Top) (function ((~ g!_) (~ (code.symbol ["" "0"]))) #//.Null)] - [poly.bool (|>> #//.Boolean)] - [poly.nat (:: (~! ..Codec) (~' encode))] - [poly.int (:: (~! ..Codec) (~' encode))] - [poly.frac (|>> #//.Number)] - [poly.text (|>> #//.String)]) + [(poly.like Bool) (|>> #//.Boolean)] + [(poly.like Nat) (:: (~! ..Codec) (~' encode))] + [(poly.like Int) (:: (~! ..Codec) (~' encode))] + [(poly.like Frac) (|>> #//.Number)] + [(poly.like Text) (|>> #//.String)])