aboutsummaryrefslogtreecommitdiff
path: root/tour/traits.sloth
diff options
context:
space:
mode:
Diffstat (limited to 'tour/traits.sloth')
-rw-r--r--tour/traits.sloth34
1 files changed, 34 insertions, 0 deletions
diff --git a/tour/traits.sloth b/tour/traits.sloth
new file mode 100644
index 0000000..80319de
--- /dev/null
+++ b/tour/traits.sloth
@@ -0,0 +1,34 @@
+# Much like Rust's traits or Haskell's type classes sloth uses a trait system for
+# polymorphism.
+trait BasicTrait {
+ fn add() -> i32;
+}
+
+trait AddAssign: Add {
+ fn add_assign(value: i32, rhs: i32) -> i32;
+}
+
+trait Add {
+ fn add(lhs: i32, rhs: i32) -> i32;
+
+ default impl AddAssign {
+ fn add_assign(value: i32, rhs: i32) -> i32 {
+ return add(value, rhs);
+ }
+ }
+}
+
+# In order to make implementing traits easier you can automatically derive traits.
+# Types will implicitly derive from Debug, Copy, Eq and Ord if possible.
+type Person = {
+ name: String,
+ age: i32,
+ hobbies: Set<String>,
+};
+
+# You can easily derive from more traits using the `derive` keyword.
+type Person derives Serialize, Deserialize = {
+ name: String,
+ age: i32,
+ hobbies: Set<String>,
+};