diff options
author | LuxLang | 2015-07-29 20:41:46 -0400 |
---|---|---|
committer | LuxLang | 2015-07-29 20:41:46 -0400 |
commit | 3b0b7de8d898662ba154aa8cbd578d26fb91e62e (patch) | |
tree | b89d963155f48664913e72457fdd0e200bd14831 /source/lux/data/io.lux | |
parent | 2aca948eddd42300a936fd449b8ab77333d95146 (diff) | |
parent | 3bf6cc274a81821243a68b3bd81e88e6a8c2a07a (diff) |
Merge pull request #4 from LuxLang/v0.2
V0.2
Diffstat (limited to 'source/lux/data/io.lux')
-rw-r--r-- | source/lux/data/io.lux | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/source/lux/data/io.lux b/source/lux/data/io.lux new file mode 100644 index 000000000..a194fc854 --- /dev/null +++ b/source/lux/data/io.lux @@ -0,0 +1,52 @@ +## Copyright (c) Eduardo Julian. All rights reserved. +## The use and distribution terms for this software are covered by the +## Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) +## which can be found in the file epl-v10.html at the root of this distribution. +## By using this software in any fashion, you are agreeing to be bound by +## the terms of this license. +## You must not remove this notice, or any other, from this software. + +(;import lux + (lux/meta macro) + (lux/control (functor #as F) + (monad #as M)) + (.. list + (text #as T #open ("text:" Text/Monoid)))) + +## Types +(deftype #export (IO a) + (-> (,) a)) + +## Syntax +(defmacro #export (io tokens state) + (case tokens + (\ (list value)) + (let [blank (symbol$ ["" ""])] + (#;Right [state (list (` (_lux_lambda (~ blank) (~ blank) (~ value))))])) + + _ + (#;Left "Wrong syntax for io"))) + +## Structures +(defstruct #export IO/Functor (F;Functor IO) + (def (F;map f ma) + (io (f (ma []))))) + +(defstruct #export IO/Monad (M;Monad IO) + (def M;_functor IO/Functor) + + (def (M;wrap x) + (io x)) + + (def (M;join mma) + (mma []))) + +## Functions +(def #export (print x) + (-> Text (IO (,))) + (io (_jvm_invokevirtual "java.io.PrintStream" "print" ["java.lang.Object"] + (_jvm_getstatic "java.lang.System" "out") [x]))) + +(def #export (println x) + (-> Text (IO (,))) + (print (text:++ x "\n"))) |