Ich versuche höhere Ordnung polymophism in scala zu erreichen durch eine sehr einfache Schnittstelle implementiert, die eine Monade beschreibt aber stoße ich auf ein Problem, das ich nicht wirklich verstehen.Gängige Praxis für höhere Ordnung Polymorphismus in scala
implementiert ich das gleiche mit C++ und der Code sieht wie folgt aus:
#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;
}
Wenn mit scala das Gleiche zu tun versuchen, scheitern I:
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)
}
}
Der Compiler beschwert sich über:
[[email protected]:Scala]:434> scalac highorder.scala
highorder.scala:5: error: not found: value Container
Container[A](a)
^
one error found
Was mache ich hier falsch? Es scheint ein grundlegendes Konzept zu sein, ich scheine nicht über scala typeconstructors zu verstehen.
Grüße, raichoo
http://stackoverflow.com/questions/1992532/monad-trait-in-scala – missingfaktor
Danke, dieser Link sieht sehr interessant aus, aber beantwortet meine Frage nicht wirklich. Ich wollte nichts über Monaden wissen, meine Frage war über Typkonstruktorpolymorphismus. Trotzdem sieht es nach einer guten Lektüre aus. :) – raichoo