OM
но это по правде тонкости
те же трейты в Расте работают аналогично
хотелось бы просто их не писать, а объединить это.
использовать тип сразу как самодостаточную единицу, так и как контракт
Size: a a a
OM
OM
AV
OM
OM
AV
МБ
AV
AV
class Monoid a where
mempty :: a
МБ
МБ
class Monoid a where
mempty :: a
AV
AV
AV
AK
struct Foo {
public int a;
public int b;
}
struct Bar {
public int a;
public int b;
public int c;
}
void DoSomething(Foo f) { ... }
МБ
interface Monoid<A> { public A mempty(); ... }
?AV
AV
foo :: Monoid a => a
foo = mempty
AV
А
class Monoid a where
mempty :: a