00:24
frost joined
00:58
frost left
04:58
frost joined
05:49
frost left
13:05
A26F64 joined
17:16
A26F64 left
|
|||
leobm | can i simulate something like typeclasses in raku? | 17:33 | |
So the type should have a role (e.g. Countable) and then | |||
use a very specific implementation for it based on this role and the type | |||
``` | |||
role Countable is export { | |||
proto sub count(--> Int) is pure {*} | |||
} | |||
my $s = "dsad" but Countable; | |||
say $s.count(); ## should call an implementation for Str | |||
my @a = <a b c> but Countable; | |||
say @a.count() ## should call an implementation for Array; | |||
``` | |||
lizmat | m: role Foo { method bar { ... } }; class Baz does Foo { } | 17:34 | |
camelia | ===SORRY!=== Error while compiling <tmp> Method 'bar' must be implemented by Baz because it is required by roles: Foo. at <tmp>:1 |
||
leobm | maybe something similar to implicit-conversions in scala? But with raku roles.... | 17:35 | |
I came across this question because I was looking at the following module: modules.raku.org/dist/Colorizable:...le.rakumod | 17:39 | ||
But there is the implementation in the role itself (for Str) | |||
But what if I want to make e.g. another type Colorizable? | |||
i have seen that i can give parameters to the role itself. | 17:40 | ||
e.g. | |||
``` | |||
role Countable[::T] is export { | |||
proto sub count(--> Int) is pure {*} | |||
} | |||
``` | |||
Can I do something with this? | |||
lizmat | the ::T is a very specific one | 17:41 | |
it's more general | |||
m: role max-value[$max = Inf] { ... } | |||
camelia | ( no output ) | ||
lizmat | so you can have default values for the parameters you''re passing | 17:42 | |
the ::T case is really if you want to specify types to which you want to constrain variables later | |||
20:11
MasterDuke joined
|