aboutsummaryrefslogtreecommitdiff
path: root/src/pair.h
diff options
context:
space:
mode:
authorAdrian Kummerlaender2015-02-06 19:26:26 +0100
committerAdrian Kummerlaender2015-02-06 19:26:26 +0100
commit27aaee43499c268903332c7e9e1e6ec2d193dc3a (patch)
treefcd6a361aa5ce6a9c095f496886807f87af85ea0 /src/pair.h
parent1e0528b1a870e0e0f2b15f468fc60f80e5fc20b3 (diff)
downloadTypeAsValue-27aaee43499c268903332c7e9e1e6ec2d193dc3a.tar
TypeAsValue-27aaee43499c268903332c7e9e1e6ec2d193dc3a.tar.gz
TypeAsValue-27aaee43499c268903332c7e9e1e6ec2d193dc3a.tar.bz2
TypeAsValue-27aaee43499c268903332c7e9e1e6ec2d193dc3a.tar.lz
TypeAsValue-27aaee43499c268903332c7e9e1e6ec2d193dc3a.tar.xz
TypeAsValue-27aaee43499c268903332c7e9e1e6ec2d193dc3a.tar.zst
TypeAsValue-27aaee43499c268903332c7e9e1e6ec2d193dc3a.zip
Revamped to use `Cons` as a function and `Pair` as its result
* this is analogous to _Scheme_ where a pair (dot-expression) is returned from a call to `cons` * `Head` and `Tail` are kept as direct references to the `CAR` and `CDR` values of a pair to match e.g. the math operators
Diffstat (limited to 'src/pair.h')
-rw-r--r--src/pair.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/pair.h b/src/pair.h
new file mode 100644
index 0000000..20bef4e
--- /dev/null
+++ b/src/pair.h
@@ -0,0 +1,26 @@
+#ifndef TYPEASVALUE_SRC_PAIR_H_
+#define TYPEASVALUE_SRC_PAIR_H_
+
+#include <type_traits>
+
+namespace tav {
+
+namespace detail { struct pair_tag { }; }
+
+template <
+ typename CAR,
+ typename CDR
+>
+struct Pair : detail::pair_tag {
+ typedef CAR car;
+ typedef CDR cdr;
+
+ typedef Pair<CAR, CDR> type;
+};
+
+template <typename Type>
+using IsPair = std::is_base_of<detail::pair_tag, Type>;
+
+}
+
+#endif // TYPEASVALUE_SRC_PAIR_H_