Monad
ist ein Monoid, aber es ist ein Monoid in einer anderen Weise als, sagen wir Integer
. Ich frage mich, ob es eine Möglichkeit gibt, Monoid'
und Monad'
so zu schreiben, dass sowohl Integer
als auch Monad'
als Instanzen der gleichen Monoid'
Typklasse ausgedrückt werden können? SoInstanz Monoid Monad
Antwort
Ich mache meinen Kommentar zu einer Antwort auf Tichons Bitte. This blog post zeigt, wie Monad
und Monoid
unter der gleichen Typklasse mit Hilfe von Art Polymorphismus zu vereinheitlichen. Dies unterscheidet sich ein wenig von der Antwort von Tel, da die Monade als Monoid in der Kategorie Endofunctors implementiert ist und nicht als Monoid in einer Kleisli-Kategorie.
Und so machst du * das * Monoid! Ich wollte letzte Nacht keine Art von Kalkül durcharbeiten. –
Die Verbindung ist tot. – user2023370
, lassen Sie uns eine bestimmte Art und Weise holen Integer
hat eine Monoid
instance Monoid Int where
zero = 0
plus = (+)
und jetzt ist hier ein Monad
Monoid
{-# LANGUAGE FlexibleInstances #-}
instance Monad m => Monoid (Kleisli m a a) where
zero = id
plus = (.)
und hier ist eine andere
instance MonadPlus m => Monoid (m a) where
zero = mzero
plus = mplus
Ich bin nicht sicher wie man die "Monade ist ein Monoid in der c Englisch: bio-pro.de/en/region/stern/magazin/...1/index.html Die Formulierung von Endofaktoren ist jedoch in Haskell nicht enthalten.
Ich denke, dass Sie [diesen Blogbeitrag] (http://www.jonmsterling.com/posts/2012-01-12-unifying-monoids-and-monads-with-polymorphic-kinds.html) erklären möchten wie man guten Polymorphismus verwendet, um die beiden unter der gleichen Typklasse zu vereinheitlichen. –
@GabrielGonzalez: Kannst du das zu einer Antwort machen? Es beantwortet tatsächlich die Frage, so wie ich sie verstehe, anders als die aktuelle Antwort. –