sto cercando di cogliere di ordine superiore-polymophism in scala mediante l'attuazione di un'interfaccia molto semplice che descrive una monade, ma ho incontrato un problema che non capisco.pratica comune per ordine superiore-polimorfismo in scala
ho implementato lo stesso con C++ e il codice simile a questo:
#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;
}
Nel provare a fare lo stesso con scala fallisco:
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)
}
}
Il compilatore si lamenta:
[[email protected]:Scala]:434> scalac highorder.scala
highorder.scala:5: error: not found: value Container
Container[A](a)
^
one error found
Cosa sto facendo di sbagliato qui? Sembra che ci sia un concetto fondamentale che non mi sembra di capire su scala typeconstructors.
saluti, raichoo
http://stackoverflow.com/questions/1992532/monad-trait-in-scala – missingfaktor
Grazie, il collegamento sembra molto interessante ma in realtà non risponde alla mia domanda. Non volevo sapere nulla delle monadi, la mia domanda riguardava il polimorfismo del costruttore del tipo. Anche se sembra una buona lettura. :) – raichoo