J'essaie de saisir le polymorphisme d'ordre supérieur dans scala en implémentant une interface très basique qui décrit une monade mais je rencontre un problème que je ne comprends pas vraiment.Pratique courante pour le polymorphisme d'ordre supérieur dans scala
I mis en œuvre la même chose avec C++ et le code ressemble à ceci:
#include <iostream>
template <typename T>
class Value {
private:
T value;
public:
Value(const T& t) {
this->value = t;
}
T get() {
return this->value;
}
};
template < template <typename> class Container >
class Monad {
public:
template <typename A> Container<A> pure(const A& a);
};
template <template <typename> class Container>
template <typename A>
Container<A> Monad<Container>::pure(const A& a) {
return Container<A>(a);
}
int main() {
Monad<Value> m;
std::cout << m.pure(1).get() << std::endl;
return 0;
}
Lorsque vous essayez de faire la même chose avec scala I Fail:
class Value[T](val value: T)
class Monad[Container[T]] {
def pure[A](a: A): Container[A] =
Container[A](a)
}
object Main {
def main(args: Array[String]): Unit = {
val m = new Monad[Value]
m.pure(1)
}
}
Le compilateur se plaint:
[[email protected]:Scala]:434> scalac highorder.scala
highorder.scala:5: error: not found: value Container
Container[A](a)
^
one error found
Qu'est-ce que je fais mal ici? Il semble y avoir un concept fondamental que je ne semble pas comprendre à propos des typographes scala.
Cordialement, raichoo
http://stackoverflow.com/questions/1992532/monad-trait-in-scala – missingfaktor
Merci, ce lien semble très intéressant, mais ne répond pas vraiment à ma question. Je ne voulais pas savoir quoi que ce soit au sujet monades, ma question était sur le polymorphisme constructeur de type. Même si, il ressemble à une bonne lecture. :) – raichoo