Sorry, wenn die Frage nicht zu klar ist. Ich bin mir nicht sicher, der beste Weg, um es zu formulieren (fühlen Sie sich frei zu bearbeiten!). Ich denke ein Beispiel wäre am klarsten:C++ - Konzepte: Kann ich ein Konzept definieren, das selbst eine Vorlage ist?
Ich versuche ein Monad-Konzept basierend auf der Haskell definition zu definieren. Der Bindungsoperator (>>=
) erfordert, dass eine Monad
vom Typ A
an eine Funktion gebunden werden kann, die eine A
übernimmt und eine Monad
vom Typ B
zurückgibt. Ich kann A
in Bezug auf eine value_type
Typedef definieren, aber wie definiere ich Typ B
in meinem Konzept?
template <typename M>
concept bool Monad()
{
return requires(M m, Function<_1, ValueType<M>> f) {
// (>>=) :: m a -> (a -> m b) -> m b
{ m >>= f } -> M
}
}
Im obigen Beispiel, was stelle ich anstelle der _1
in der Funktion <> Konzept?
Begrenzt dies auch das Ergebnis, wenn f aufgerufen wird, um eine Monade eines beliebigen Typs zu sein?
Nebenbei, (ab) mit 'operator >> =' hier scheint wie ein Fehler. In C++ assoziiert 'a >> = b >> = c' als 'a >> = (b >> = c)', während es in Haskell als '(a >> = b) >> = c' gilt. –
ja ich weiß :) offensichtlich nicht produktions würdiger code - nur ein spiel zu lernen ein wenig über konzepte –