From 073c902a31936c2b53d89245662fb272c9670169 Mon Sep 17 00:00:00 2001 From: JJ Date: Thu, 9 May 2024 18:00:01 -0700 Subject: std: sweeping changes. - replace interfaces with classes - replace : with then and do - solidify memory management as rust-style ownership - replace unsafe blocks with safe/unsafe attributes - add magic and copy attributes - switch Coerce impl from from to to --- std/prelude/convert.pk | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) (limited to 'std/prelude/convert.pk') diff --git a/std/prelude/convert.pk b/std/prelude/convert.pk index 6abf543..ec1a4a7 100644 --- a/std/prelude/convert.pk +++ b/std/prelude/convert.pk @@ -1,23 +1,19 @@ -## std.convert: Interfaces for type coersion and conversion. +## std.convert: Classes for type coersion and conversion. ## This module is imported by default. -## The Coerce interface is used for type conversion that will not fail. +## The Coerce class 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 +pub type Coerce[T] = class + to(Self): T + # from(T): Self -## 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 `from` function is automatically implemented for all types that +## implement `to`: that is, all types T that are convertable to U. +pub func from[T: Coerce[U], U](self: U): T = + to(self) -## The Convert interface is used for type conversion that may fail. +## The Convert class 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) +pub type Convert[T, E] = class + to(Self): Result[T, E] -- cgit v1.2.3-70-g09d2