diff --git a/morphisms/angle.morphism-base b/morphisms/angle.morphism-base
new file mode 100644
index 0000000..71aba96
--- /dev/null
+++ b/morphisms/angle.morphism-base
@@ -0,0 +1,72 @@
+```
+#define PHI 6.28318530718
+```
+
+morph_angle_as_degrees_to_turns_float ()
+    Angle ~ Degrees ~ ℝ ~ native.Float
+--> Angle ~ Turns ~ ℝ ~ native.Float
+```
+    *dst = *src / 360.0;
+    return 0;
+```
+
+morph_angle_as_degrees_to_turns_double ()
+    Angle ~ Degrees ~ ℝ ~ native.Double
+--> Angle ~ Turns ~ ℝ ~ native.Double
+```
+    *dst = *src / 360.0;
+    return 0;
+```
+
+
+morph_angle_as_turns_to_degrees_float ()
+    Angle ~ Turns ~ ℝ ~ native.Float
+--> Angle ~ Degrees ~ ℝ ~ native.Float
+```
+    *dst = *src * 360.0;
+    return 0;
+```
+
+morph_angle_as_turns_to_degrees_double ()
+    Angle ~ Turns ~ ℝ ~ native.Double
+--> Angle ~ Degrees ~ ℝ ~ native.Double
+```
+    *dst = *src * 360.0;
+    return 0;
+```
+
+
+
+
+morph_angle_as_radians_to_turns_float ()
+    Angle ~ Radians ~ ℝ ~ native.Float
+--> Angle ~ Turns ~ ℝ ~ native.Float
+```
+    *dst = *src / PHI;
+    return 0;
+```
+
+morph_angle_as_radians_to_turns_double ()
+    Angle ~ Radians ~ ℝ ~ native.Double
+--> Angle ~ Turns ~ ℝ ~ native.Double
+```
+    *dst = *src / PHI;
+    return 0;
+```
+
+
+morph_angle_as_turns_to_radians_float ()
+    Angle ~ Turns ~ ℝ ~ native.Float
+--> Angle ~ Radians ~ ℝ ~ native.Float
+```
+    *dst = *src * PHI;
+    return 0;
+```
+
+morph_angle_as_degrees_to_radians_double ()
+    Angle ~ Turns ~ ℝ ~ native.Double
+--> Angle ~ Radians ~ ℝ ~ native.Double
+```
+    *dst = *src * PHI;
+    return 0;
+```
diff --git a/morphisms/real.morphism-base b/morphisms/real.morphism-base
new file mode 100644
index 0000000..204bfbd
--- /dev/null
+++ b/morphisms/real.morphism-base
@@ -0,0 +1,105 @@
+```
+#include <stdio.h>
+```
+
+morph_real_as_decimalstr_to_float ()
+    ℝ ~ <PosInt 10 BigEndian> ~ <Seq~<ValueTerminated 0> <Digit 10>~Char~Ascii~x86.UInt8>
+--> ℝ ~ native.Float
+```
+    sscanf(src, "%f", dst);
+    return 0;
+```
+
+morph_real_as_decimalstr_to_double ()
+    ℝ ~ <PosInt 10 BigEndian> ~ <Seq~<ValueTerminated 0> <Digit 10>~Char~Ascii~x86.UInt8>
+--> ℝ ~ native.Double
+```
+    sscanf(src, "%lf", dst);
+    return 0;
+```
+
+morph_real_as_float_to_decimalstr ()
+    ℝ ~ native.Float
+--> ℝ ~ <PosInt 10 BigEndian> ~ <Seq~<ValueTerminated 0> <Digit 10>~Char~Ascii~x86.UInt8>
+```
+    sprintf(dst, "%f", *src);
+    return 0;
+```
+
+morph_real_as_double_to_decimalstr ()
+    ℝ ~ native.Double
+--> ℝ ~ <PosInt 10 BigEndian> ~ <Seq~<ValueTerminated 0> <Digit 10>~Char~Ascii~x86.UInt8>
+```
+    sprintf(dst, "%f", *src);
+    return 0;
+```
+
+
+morph_real_as_float_to_double ()
+    ℝ ~ native.Float
+--> ℝ ~ native.Double
+```
+    *dst = *src;
+    return 0;
+```
+
+morph_real_as_double_to_float ()
+    ℝ ~ native.Double
+--> ℝ ~ native.Float
+```
+    fprintf(stderr, "Warning: morphin Double -> Float. Precision loss!");
+    *dst = *src;
+    return 0;
+```
+
+morph_real_as_u64_to_float ()
+    ℝ ~ ℕ ~ x86.UInt64
+--> ℝ ~ native.Float
+```
+    fprintf(stderr, "Warning: morphin UInt64 -> Float. Precision loss!");
+    *dst = *src;
+    return 0;
+```
+
+morph_real_as_u64_to_double ()
+    ℝ ~ ℕ ~ x86.UInt64
+--> ℝ ~ native.Double
+```
+    fprintf(stderr, "Warning: morphin UInt64 -> Double. Precision loss!");
+    *dst = *src;
+    return 0;
+```
+
+morph_real_as_quantized_linear_to_float (Begin: ℝ, End: ℝ, Steps: ℤ)
+    ℝ ~ <QuantizedLinear Begin End Steps> ~ ℕ ~ x86.UInt64
+--> ℝ ~ native.Float
+```
+    *dst = (float)Begin  +  ( *src * ((float)End - (float)Begin) ) / (float)Steps;
+    return 0;
+```
+
+morph_real_as_float_to_quantized_linear (Begin: ℝ, End: ℝ, Steps: ℤ)
+    ℝ ~ native.Float
+--> ℝ ~ <QuantizedLinear Begin End Steps> ~ ℕ ~ x86.UInt64
+```
+    *dst = ((*src - (float)Begin) * (float)Steps) / ((float)End - (float)Begin);
+    return 0;
+```
+
+
+
+morph_real_as_quantized_linear_to_double (Begin: ℝ, End: ℝ, Steps: ℤ)
+    ℝ ~ <QuantizedLinear Begin End Steps> ~ ℕ ~ x86.UInt64
+--> ℝ ~ native.Double
+```
+    *dst = (double)Begin  +  ( *src * ((double)End - (double)Begin) ) / (double)Steps;
+    return 0;
+```
+
+morph_real_as_double_to_quantized_linear (Begin: ℝ, End: ℝ, Steps: ℤ)
+    ℝ ~ native.Double
+--> ℝ ~ <QuantizedLinear Begin End Steps> ~ ℕ ~ x86.UInt64
+```
+    *dst = ((*src - (double)Begin) * (double)Steps) / ((double)End - (double)Begin);
+    return 0;
+```
diff --git a/morphisms/temperature.morphism-base b/morphisms/temperature.morphism-base
new file mode 100644
index 0000000..7831292
--- /dev/null
+++ b/morphisms/temperature.morphism-base
@@ -0,0 +1,34 @@
+```
+```
+
+morph_celsius_to_kelvin ()
+      Temperature ~ Celsius ~ ℝ ~ native.Float
+-->   Temperature ~ Kelvin ~ ℝ ~ native.Float
+```
+    *dst = *src + 273.15;
+    return 0;
+```
+
+morph_kelvin_to_celsius ()
+      Temperature ~ Kelvin ~ ℝ ~ native.Float
+-->   Temperature ~ Celsius ~ ℝ ~ native.Float
+```
+    *dst = *src - 273.15;
+    return 0;
+```
+
+morph_celsius_to_fahrenheit ()
+      Temperature ~ Celsius ~ ℝ ~ native.Float
+-->   Temperature ~ Fahrenheit ~ ℝ ~ native.Float
+```
+    *dst = (*src * 9.0 / 5.0) + 32.0;
+    return 0;
+```
+
+morph_fahrenheit_to_celsius ()
+      Temperature ~ Fahrenheit ~ ℝ ~ native.Float
+-->   Temperature ~ Celsius ~ ℝ ~ native.Float
+```
+    *dst = (*src - 32.0) * 5.0 / 9.0;
+    return 0;
+```