aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/control/codec.lux
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--stdlib/source/lux/control/codec.lux28
1 files changed, 28 insertions, 0 deletions
diff --git a/stdlib/source/lux/control/codec.lux b/stdlib/source/lux/control/codec.lux
new file mode 100644
index 000000000..e9833ccc9
--- /dev/null
+++ b/stdlib/source/lux/control/codec.lux
@@ -0,0 +1,28 @@
+## Copyright (c) Eduardo Julian. All rights reserved.
+## This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
+## If a copy of the MPL was not distributed with this file,
+## You can obtain one at http://mozilla.org/MPL/2.0/.
+
+(;module:
+ lux
+ (lux control/monad
+ data/error))
+
+## [Signatures]
+(sig: #export (Codec m a)
+ (: (-> a m)
+ encode)
+ (: (-> m (Error a))
+ decode))
+
+## [Values]
+(def: #export (<.> (^open "bc:") (^open "ab:"))
+ (All [a b c] (-> (Codec c b) (Codec b a) (Codec c a)))
+ (struct
+ (def: encode (|>. ab:encode bc:encode))
+
+ (def: (decode cy)
+ (do Monad<Error>
+ [by (bc:decode cy)]
+ (ab:decode by)))
+ ))