diff options
Diffstat (limited to 'std/prelude/convert.pk')
-rw-r--r-- | std/prelude/convert.pk | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/std/prelude/convert.pk b/std/prelude/convert.pk new file mode 100644 index 0000000..6abf543 --- /dev/null +++ b/std/prelude/convert.pk @@ -0,0 +1,23 @@ +## std.convert: Interfaces for type coersion and conversion. +## This module is imported by default. + +## The Coerce interface is used for type conversion that will not fail. +## Its associated methods, `from` and `into`, are used internally +## by the compiler for implicit type conversion (coersion). +pub type Coerce[T] = interface + from(T): Self + # into(Self): T + +## The `into` function is automatically implemented for all types that +## implement `from`: that is, all types U that are convertable to T. +pub func into[T, U: Coerce[T]](self: T): U = + from(self) + +## The Convert interface is used for type conversion that may fail. +# We'll see what this breaks. +pub type Convert[T] = interface + from(T): Self?! + +## A blanket implementation of a corresponding `into` function. +pub func into[T, U: Convert[T]](self: T): U = + from(self) |