比方说,我有如下一个Monoid特点:斯卡拉含半幺群Combinator的对期权
trait Monoid[A] {
def combine(a1: A, a2: A): A
def identity: A
}
现在,如果我想要写这个的optionMonoid,我可以写这样的:
val optionMonoid1 = new Monoid[Option[A]] {
def combine(a1: Option[A], a2: Option[A2]) a1 orElse a2
def identity = None
}
这给了我一个事实,即对Option中的内部类型一无所知。但是如果我想以这样的方式组合运算符,那么我想要真正地将Option中的内部类型组合起来呢?
如果你想'映射'在'Option'里面的值,你需要一个Functor实例。 –
但是请等一下,Functor实例是否会更改我的Option中包含的类型? – sparkr
即使我有一个Functor实例,我仍然不知道我的A的类型是什么,所以我可以在我的A类上应用组合运算符! – sparkr