- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Haskell 编程后,我即将开始学习 Rust。trait
关键字让我感兴趣,但我注意到您只能引用一种类型( Self
)。
在 Haskell 中,这种行为有一个编译指示:
{-# LANGUAGE MultiParamTypeClasses #-}
class ExampleBehaviour a b where
combine :: a -> a -> b
co_combine :: b -> b -> a
但是我看不到在 Rust 中有机地实现这种行为的方法。
最佳答案
我想这就是你要找的:
trait ExampleBehaviour<Other> {
fn combine(x: Other, y: Other) -> Self;
fn co_combine(x: Self, y: Self) -> Other;
}
这是该类型类的 Haskell 实例和相应的特征的 Rust 实现的示例:
data Foo = Foo Int Int
newtype Bar = Bar Int
instance ExampleBehaviour Foo Bar where
combine (Foo x1 y1) (Foo x2 y2) = Bar (x1 * x2 + y1 * y2)
co_combine (Bar x) (Bar y) = Foo x y
struct Foo(i32, i32);
struct Bar(i32);
impl ExampleBehaviour<Foo> for Bar {
fn combine(Foo(x1, y1): Foo, Foo(x2, y2): Foo) -> Self {
Bar(x1 * x2 + y1 * y2)
}
fn co_combine(Bar(x): Self, Bar(y): Self) -> Foo {
Foo(x, y)
}
}
关于haskell - 类似于 Haskell 的 MultiParamTypeClasses,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69507728/
我有一个定义如下的类型类: class (Eq a, Show a, Typeable a) => Condition v a where (和一些方法) 我想编写一个函数,它接受两个具有相同“v”的
假设我定义了 multi-parameter type class : {-# LANGUAGE MultiParamTypeClasses, AllowAmbiguousTypes, Flexibl
我正在使用一个类型类,我可以在其中“测量”类型 v 的某些属性。在 a 类型的对象上.例如,请考虑以下定义: {-# LANGUAGE MultiParamTypeClasses #-} data S
我正在努力掌握GADTs ,我查看了GADTs example在 GHC 的手册中。据我所知,MultiParamTypeClasses 可以做同样的事情。 : {-# LANGUAGE MultiP
我是 Haskell 新手,只是玩了一段时间。 我编写了一个轻量级的 OOP 模拟: --OOP.hs {-# LANGUAGE MultiParamTypeClasses, FlexibleIn
通过函数依赖,我可以声明 Foo 类: class Foo a b c | a -> b where foo1 :: a -> b -> c foo2 :: a -> c 当我调用fo
在 Haskell 编程后,我即将开始学习 Rust。trait关键字让我感兴趣,但我注意到您只能引用一种类型( Self )。 在 Haskell 中,这种行为有一个编译指示: {-# LANGUA
当我使用 MultiParamTypeClasses 时,我可以创建忽略类型参数之一的类函数(即,如下面的“身份”)。 {-# LANGUAGE MultiParamTypeClasses #-} d
class Monad m => MonadState s m | m -> s where -- | Return the state from the internals of the m
我是一名优秀的程序员,十分优秀!