mirror of
https://codeberg.org/ProgramSnail/lang_2023.git
synced 2025-12-06 06:58:45 +00:00
typeclasses can have required methods and required functions
This commit is contained in:
parent
562541087e
commit
4882d458f8
11 changed files with 113 additions and 43 deletions
|
|
@ -5,7 +5,7 @@ basic Char
|
|||
basic Bool
|
||||
basic Unit
|
||||
|
||||
// bool functions
|
||||
//
|
||||
|
||||
decl not : Bool -> Bool
|
||||
def not : x =
|
||||
|
|
@ -36,14 +36,14 @@ def ( || ) : x y =
|
|||
// Eq typeclass
|
||||
|
||||
typeclass Eq =
|
||||
& ( == ) : Eq -> Bool
|
||||
& ( != ) : Eq -> Bool
|
||||
& var ( == ) : Eq -> Bool
|
||||
& var ( != ) : Eq -> Bool
|
||||
|
||||
namespace const Eq {
|
||||
def ( != ) : x = not: (self == x)
|
||||
def var ( != ) : x = not: (self == x)
|
||||
}
|
||||
|
||||
// Ord typeclass
|
||||
//
|
||||
|
||||
struct Order =
|
||||
| EQ
|
||||
|
|
@ -51,13 +51,13 @@ struct Order =
|
|||
| GT
|
||||
|
||||
typeclass (Ord : #Eq) =
|
||||
& compare: Ord -> Order
|
||||
& ( < ) : Ord -> Bool
|
||||
& ( >= ) : Ord -> Bool
|
||||
& ( > ) : Ord -> Bool
|
||||
& ( <= ) : Ord -> Bool
|
||||
& min : Ord -> Ord
|
||||
& max : Ord -> Ord
|
||||
& var compare: Ord -> Order
|
||||
& var ( < ) : Ord -> Bool
|
||||
& var ( >= ) : Ord -> Bool
|
||||
& var ( > ) : Ord -> Bool
|
||||
& var ( <= ) : Ord -> Bool
|
||||
& var min : Ord -> Ord
|
||||
& var max : Ord -> Ord
|
||||
|
||||
namespace var Ord {
|
||||
def compare : x =
|
||||
|
|
@ -75,23 +75,55 @@ namespace var Ord {
|
|||
//
|
||||
|
||||
typeclass Show =
|
||||
& show : -> String
|
||||
& var show : -> String
|
||||
|
||||
typeclass Read =
|
||||
& read : String -> Read
|
||||
& var read : String -> Read
|
||||
|
||||
typeclass Debug =
|
||||
& debug : -> String
|
||||
|
||||
//
|
||||
|
||||
typeclass Default =
|
||||
& default : -> Default
|
||||
|
||||
//
|
||||
|
||||
// Enum typeclass
|
||||
typeclass Bounded =
|
||||
& min_bound : -> Bounded
|
||||
& max_bound : -> Bounded
|
||||
& var is_max_bound : -> Bool
|
||||
& var is_min_bound : -> Bool
|
||||
|
||||
//
|
||||
|
||||
typeclass Enum =
|
||||
& succ : Enum -> (Optional Enum)
|
||||
& pred : Enum -> (Optional Enum)
|
||||
& var succ : -> (Optional Enum)
|
||||
& var pred : -> (Optional Enum)
|
||||
& toEnum : Int -> Enum
|
||||
& var fromEnum : -> Int
|
||||
|
||||
//
|
||||
|
||||
|
||||
|
||||
// // bad
|
||||
// typeclass Functor 'A =
|
||||
// & fmap 'B ('F : (#Functor 'B)) : ('A -> 'B) -> Functor -> 'F
|
||||
|
||||
// typeclass (Iterator : #Eq) =
|
||||
// & next : -> Unit
|
||||
// & prev : -> Unit
|
||||
//
|
||||
// typeclass Iterable ('Iter : #Iterable) =
|
||||
// & begin : -> 'Iter
|
||||
// & end : -> 'Iter
|
||||
|
||||
//
|
||||
|
||||
class Slice ('Elem : ) ('Structure : (#Iterable)) =
|
||||
|
||||
|
||||
//
|
||||
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
typeclass Copy =
|
||||
& copy : Copy -> Copy
|
||||
typeclass Default =
|
||||
& default : -> Copy
|
||||
|
||||
typeclass (Ord : #Eq) =
|
||||
& is_less_then : Ord -> Bool
|
||||
& var is_less_then : Ord -> Bool
|
||||
|
||||
typeclass (D : #A #B #C) 'A 'B =
|
||||
& do_something : -> (& 'A & 'B)
|
||||
& var do_something : -> (& 'A & 'B)
|
||||
|
||||
typeclass E 'A =
|
||||
& do_something : -> 'A
|
||||
& var do_something : -> 'A
|
||||
|
||||
decl ( == ) ('A : #Ord) : 'A -> 'A -> Bool
|
||||
def ( == ) : a b = a.is_equal_to: b
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue